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

时间:2021-05-02

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

  • functionBing_get_pagenavi($query=false,$num=false,$before='<ARticleclass="pagenavipostlistpagenavi">',$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'<spanclass="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'<ahref="'.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'<ahref="'.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'<spanclass="current">'.$current_page_text.'</span>';
  • }else{
  • $page_text=str_replace('%PAGE_NUMBER%',number_format_i18n($i),$options['page_text']);
  • echo'<ahref="'.esc_url(get_pagenum_link($i)).'"class="page"title="'.$page_text.'">'.$page_text.'</a>';
  • }
  • }
  • if(empty($query))echo'<spanid="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'<ahref="'.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'<ahref="'.esc_url(get_pagenum_link($max_page)).'"class="last"title="'.$last_page_text.'">'.$last_page_text.'</a>';
  • }
  • echo$after;
  • }
  • 然后在需要使用分页导航的地方添加下边的代码:

    ?

    1 <?php if( function_exists( 'Bing_get_pagenavi' ) ) Bing_get_pagenavi(); ?>

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章