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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
php动态生成JavaScript代码
Mar 09 PHP
Apache中php.ini的设置方法
Feb 28 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php通过执行CutyCapt命令实现网页截图的方法
Sep 30 PHP
php实现socket推送技术的示例
Dec 20 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的历史和优缺点
2006/10/09 PHP
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
Python数据结构之Array用法实例
2014/10/09 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
党员服务承诺书
2014/05/28 职场文书
奖学金感谢信
2015/01/21 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL