WordPress主题中添加文章列表页页码导航的PHP代码实例


Posted in PHP onDecember 22, 2015

WordPress 默认给主题开发者的建议是在文章列表底部提供上下页按钮,所以没有提供直接用在文章列表下的分页导航的函数。这里我提供一个比较完善的分页导航函数。

WordPress主题中添加文章列表页页码导航的PHP代码实例

/**
  *WordPress 文章列表分页导航
  *http://www.endskin.com/page-navi/
*/
function Bing_get_pagenavi( $query = false, $num = false, $before = '<article class="pagenavi postlistpagenavi">', $after = '</article>', $options = array() ){
  global $wp_query;
  $options = wp_parse_args( $options, array(
    'pages_text' => '%CURRENT_PAGE%/%TOTAL_PAGES%',
    'current_text' => '%PAGE_NUMBER%',
    'page_text' => '%PAGE_NUMBER%',
    'first_text' => __( '« 首页', 'Bing' ),
    'last_text' => __( '尾页 »', 'Bing' ),
    'next_text' => __( '»', 'Bing' ),
    'prev_text' => '«',
    'dotright_text' => '...',
    'dotleft_text' => '...',
    'num_pages' => 5,
    'always_show' => 0,
    'num_larger_page_numbers' => 3,
    'larger_page_numbers_multiple' => 10
  ) );
  if( $wp_query->max_num_pages <= 1 || is_single() ) return;
  if( !empty( $query ) ){
    $request = $query->request;
    $numposts = $query->found_posts;
    $max_page = $query->max_num_pages;
    $posts_per_page = intval( $num );
  }else{
    $request = $wp_query->request;
    $numposts = $wp_query->found_posts;
    $max_page = $wp_query->max_num_pages;
    $posts_per_page = intval( get_query_var( 'posts_per_page' ) );
  }
  $paged = intval( get_query_var( 'paged' ) );
  if( empty( $paged ) || $paged == 0 ) $paged = 1;
  $pages_to_show = intval( $options['num_pages'] );
  $larger_page_to_show = intval( $options['num_larger_page_numbers'] );
  $larger_page_multiple = intval( $options['larger_page_numbers_multiple'] );
  $pages_to_show_minus_1 = $pages_to_show - 1;
  $half_page_start = floor( $pages_to_show_minus_1 / 2 );
  $half_page_end = ceil( $pages_to_show_minus_1 / 2 );
  $start_page = $paged - $half_page_start;
  if( $start_page <= 0 ) $start_page = 1;
  $end_page = $paged + $half_page_end;
  if( ( $end_page - $start_page ) != $pages_to_show_minus_1 ) $end_page = $start_page + $pages_to_show_minus_1;
  if( $end_page > $max_page ){
    $start_page = $max_page - $pages_to_show_minus_1;
    $end_page = $max_page;
  }
  if( $start_page <= 0 ) $start_page = 1;
  $larger_per_page = $larger_page_to_show * $larger_page_multiple;
  $larger_start_page_start = ( ( floor( $start_page / 10 ) * 10 ) + $larger_page_multiple ) - $larger_per_page;
  $larger_start_page_end = floor( $start_page / 10 ) * 10 + $larger_page_multiple;
  $larger_end_page_start = floor( $end_page / 10 ) * 10 + $larger_page_multiple;
  $larger_end_page_end = floor( $end_page / 10 ) * 10 + ( $larger_per_page );
  if( $larger_start_page_end - $larger_page_multiple == $start_page ){
    $larger_start_page_start = $larger_start_page_start - $larger_page_multiple;
    $larger_start_page_end = $larger_start_page_end - $larger_page_multiple;
  }
  if( $larger_start_page_start <= 0 ) $larger_start_page_start = $larger_page_multiple;
  if( $larger_start_page_end > $max_page ) $larger_start_page_end = $max_page;
  if( $larger_end_page_end > $max_page ) $larger_end_page_end = $max_page;
  if( $max_page > 1 || intval( $options['always_show'] ) == 1 ){
    $pages_text = str_replace( '%CURRENT_PAGE%', number_format_i18n( $paged ), $options['pages_text'] );
    $pages_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $max_page ), $pages_text);
    echo $before;
    if( !empty( $pages_text ) ) echo '<span class="pages">' . $pages_text . '</span>';
    if( $start_page >= 2 && $pages_to_show < $max_page ){
      $first_page_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $max_page ), $options['first_text'] );
      echo '<a href="' . esc_url( get_pagenum_link() ) . '" class="first" title="' . $first_page_text . '">' . $first_page_text . '</a>';
    }
    if( $larger_page_to_show > 0 && $larger_start_page_start > 0 && $larger_start_page_end <= $max_page ){
      for( $i = $larger_start_page_start;$i < $larger_start_page_end;$i += $larger_page_multiple ){
        $page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['page_text'] );
        echo '<a href="' . esc_url( get_pagenum_link( $i ) ) . '" class="page" title="' . $page_text . '">' . $page_text . '</a>';
      }
    }
    previous_posts_link( $options['prev_text'] );
    for( $i = $start_page;$i <= $end_page;$i++ ){            
      if( $i == $paged ){
        $current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
        echo '<span class="current">' . $current_page_text . '</span>';
      }else{
        $page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['page_text'] );
        echo '<a href="' . esc_url( get_pagenum_link( $i ) ).'" class="page" title="' . $page_text . '">' . $page_text . '</a>';
      }
    }
    if( empty( $query ) ) echo '<span id="next-page">';
    next_posts_link( $options['next_text'], $max_page );
    if( empty( $query ) ) echo '</span>';
  }
  if( $larger_page_to_show > 0 && $larger_end_page_start < $max_page ){
    for( $i = $larger_end_page_start;$i <= $larger_end_page_end;$i += $larger_page_multiple ){
      $page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['page_text'] );
      echo '<a href="' . esc_url( get_pagenum_link( $i ) ).'" class="page" title="' . $page_text . '">' . $page_text . '</a>';
    }
  }
  if( $end_page < $max_page ){
    $last_page_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $max_page ), $options['last_text'] );
    echo '<a href="' . esc_url( get_pagenum_link( $max_page ) ) . '" class="last" title="' . $last_page_text . '">' . $last_page_text . '</a>';
  }
  echo $after;
}

然后在需要使用分页导航的地方添加下边的代码:

<?php if( function_exists( 'Bing_get_pagenavi' ) ) Bing_get_pagenavi(); ?>
PHP 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
php 使用array函数实现分页
Feb 13 PHP
php建立Ftp连接的方法
Mar 07 PHP
yii用户注册表单验证实例
Dec 26 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 #PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 #PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 #PHP
PHP使用mkdir创建多级目录的方法
Dec 22 #PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 #PHP
php删除数组中重复元素的方法
Dec 22 #PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 #PHP
You might like
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python将unicode转为str的方法
2017/06/21 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
python右对齐的实例方法
2020/07/05 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
实习自我鉴定模板
2013/09/28 职场文书
元旦晚会邀请函
2014/01/27 职场文书
贷款担保书范文
2014/05/13 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
法律意见书范文
2015/06/04 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫