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
ie6 动态缩略图不显示的原因
Jun 21 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
浅谈PHP进程管理
Mar 08 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
第二节--PHP5 的对象模型
2006/11/16 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JSONP之我见
2015/03/24 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
electron中使用bootstrap的示例代码
2018/11/06 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Python读写docx文件的方法
2018/05/08 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
纽约海:Sea New York
2018/11/04 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
Java面向对象面试题
2016/12/26 面试题
中学生校园广播稿
2014/01/16 职场文书
邮政员工辞职信
2014/01/16 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
学年个人总结范文
2015/03/05 职场文书
经典爱情感言
2015/08/03 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书