WordPress主题中添加文章列表页页码导航的PHP代码实例
<p>WordPress 默认给主题开发者的建议是在文章列表底部提供上下页按钮,所以没有提供直接用在文章列表下的分页导航的函数。这里我提供一个比较完善的分页导航函数。</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress主题中添加文章列表页页码导航的PHP代码实例" alt="WordPress主题中添加文章列表页页码导航的PHP代码实例" src="https://zhuji.jb51.net/uploads/img/202305/6522a174de7ab035ae8abbb10fe49bfd.jpg"></p>
<blockquote>
<ol>
<li>
<span><span>function</span><span> Bing_get_pagenavi( $query = </span><span>false</span><span>, $num = </span><span>false</span><span>, $before = </span><span>'<ARticle >'</span><span>, $after = </span><span>'</article>'</span><span>, $options = array() ){ </span></span>
</li>
<li>
<span> global $wp_query; </span>
</li>
<li>
<span> $options = wp_parse_args( $options, array( </span>
</li>
<li>
<span> <span>'pages_text'</span><span> => </span><span>'%CURRENT_PAGE%/%TOTAL_PAGES%'</span><span>, </span></span>
</li>
<li>
<span> <span>'current_text'</span><span> => </span><span>'%PAGE_NUMBER%'</span><span>, </span></span>
</li>
<li>
<span> <span>'page_text'</span><span> => </span><span>'%PAGE_NUMBER%'</span><span>, </span></span>
</li>
<li>
<span> <span>'first_text'</span><span> => __( </span><span>'« 首页'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span> <span>'last_text'</span><span> => __( </span><span>'尾页 »'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span> <span>'next_text'</span><span> => __( </span><span>'»'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span> <span>'prev_text'</span><span> => </span><span>'«'</span><span>, </span></span>
</li>
<li>
<span> <span>'dotright_text'</span><span> => </span><span>'...'</span><span>, </span></span>
</li>
<li>
<span> <span>'dotleft_text'</span><span> => </span><span>'...'</span><span>, </span></span>
</li>
<li>
<span> <span>'num_pages'</span><span> => 5, </span></span>
</li>
<li>
<span> <span>'always_show'</span><span> => 0, </span></span>
</li>
<li>
<span> <span>'num_larger_page_numbers'</span><span> => 3, </span></span>
</li>
<li>
<span> <span>'larger_page_numbers_multiple'</span><span> => 10 </span></span>
</li>
<li>
<span> ) ); </span>
</li>
<li>
<span> <span>if</span><span>( $wp_query->max_num_pages <= 1 || is_single() ) </span><span>return</span><span>; </span></span>
</li>
<li>
<span> <span>if</span><span>( !empty( $query ) ){ </span></span>
</li>
<li>
<span> $request = $query->request; </span>
</li>
<li>
<span> $numposts = $query->found_posts; </span>
</li>
<li>
<span> $max_page = $query->max_num_pages; </span>
</li>
<li>
<span> $posts_per_page = intval( $num ); </span>
</li>
<li>
<span> }<span>else</span><span>{ </span></span>
</li>
<li>
<span> $request = $wp_query->request; </span>
</li>
<li>
<span> $numposts = $wp_query->found_posts; </span>
</li>
<li>
<span> $max_page = $wp_query->max_num_pages; </span>
</li>
<li>
<span> $posts_per_page = intval( get_query_var( <span>'posts_per_page'</span><span> ) ); </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> $paged = intval( get_query_var( <span>'paged'</span><span> ) ); </span></span>
</li>
<li>
<span> <span>if</span><span>( empty( $paged ) || $paged == 0 ) $paged = 1; </span></span>
</li>
<li>
<span> $pages_to_show = intval( $options[<span>'num_pages'</span><span>] ); </span></span>
</li>
<li>
<span> $larger_page_to_show = intval( $options[<span>'num_larger_page_numbers'</span><span>] ); </span></span>
</li>
<li>
<span> $larger_page_multiple = intval( $options[<span>'larger_page_numbers_multiple'</span><span>] ); </span></span>
</li>
<li>
<span> $pages_to_show_minus_1 = $pages_to_show - 1; </span>
</li>
<li>
<span> $half_page_start = floor( $pages_to_show_minus_1 / 2 ); </span>
</li>
<li>
<span> $half_page_end = ceil( $pages_to_show_minus_1 / 2 ); </span>
</li>
<li>
<span> $start_page = $paged - $half_page_start; </span>
</li>
<li>
<span> <span>if</span><span>( $start_page <= 0 ) $start_page = 1; </span></span>
</li>
<li>
<span> $end_page = $paged + $half_page_end; </span>
</li>
<li>
<span> <span>if</span><span>( ( $end_page - $start_page ) != $pages_to_show_minus_1 ) $end_page = $start_page + $pages_to_show_minus_1; </span></span>
</li>
<li>
<span> <span>if</span><span>( $end_page > $max_page ){ </span></span>
</li>
<li>
<span> $start_page = $max_page - $pages_to_show_minus_1; </span>
</li>
<li>
<span> $end_page = $max_page; </span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( $start_page <= 0 ) $start_page = 1; </span></span>
</li>
<li>
<span> $larger_per_page = $larger_page_to_show * $larger_page_multiple; </span>
</li>
<li>
<span> $larger_start_page_start = ( ( floor( $start_page / 10 ) * 10 ) + $larger_page_multiple ) - $larger_per_page; </span>
</li>
<li>
<span> $larger_start_page_end = floor( $start_page / 10 ) * 10 + $larger_page_multiple; </span>
</li>
<li>
<span> $larger_end_page_start = floor( $end_page / 10 ) * 10 + $larger_page_multiple; </span>
</li>
<li>
<span> $larger_end_page_end = floor( $end_page / 10 ) * 10 + ( $larger_per_page ); </span>
</li>
<li>
<span> <span>if</span><span>( $larger_start_page_end - $larger_page_multiple == $start_page ){ </span></span>
</li>
<li>
<span> $larger_start_page_start = $larger_start_page_start - $larger_page_multiple; </span>
</li>
<li>
<span> $larger_start_page_end = $larger_start_page_end - $larger_page_multiple; </span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( $larger_start_page_start <= 0 ) $larger_start_page_start = $larger_page_multiple; </span></span>
</li>
<li>
<span> <span>if</span><span>( $larger_start_page_end > $max_page ) $larger_start_page_end = $max_page; </span></span>
</li>
<li>
<span> <span>if</span><span>( $larger_end_page_end > $max_page ) $larger_end_page_end = $max_page; </span></span>
</li>
<li>
<span> <span>if</span><span>( $max_page > 1 || intval( $options[</span><span>'always_show'</span><span>] ) == 1 ){ </span></span>
</li>
<li>
<span> $pages_text = str_replace( <span>'%CURRENT_PAGE%'</span><span>, number_format_i18n( $paged ), $options[</span><span>'pages_text'</span><span>] ); </span></span>
</li>
<li>
<span> $pages_text = str_replace( <span>'%TOTAL_PAGES%'</span><span>, number_format_i18n( $max_page ), $pages_text); </span></span>
</li>
<li>
<span> echo $before; </span>
</li>
<li>
<span> <span>if</span><span>( !empty( $pages_text ) ) echo </span><span>'<span >'</span><span> . $pages_text . </span><span>'</span>'</span><span>; </span></span>
</li>
<li>
<span> <span>if</span><span>( $start_page >= 2 && $pages_to_show < $max_page ){ </span></span>
</li>
<li>
<span> $first_page_text = str_replace( <span>'%TOTAL_PAGES%'</span><span>, number_format_i18n( $max_page ), $options[</span><span>'first_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<a href="'</span><span> . esc_url( get_pagenum_link() ) . </span><span>'" title="'</span><span> . $first_page_text . </span><span>'">'</span><span> . $first_page_text . </span><span>'</a>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( $larger_page_to_show > 0 && $larger_start_page_start > 0 && $larger_start_page_end <= $max_page ){ </span></span>
</li>
<li>
<span> <span>for</span><span>( $i = $larger_start_page_start;$i < $larger_start_page_end;$i += $larger_page_multiple ){ </span></span>
</li>
<li>
<span> $page_text = str_replace( <span>'%PAGE_NUMBER%'</span><span>, number_format_i18n( $i ), $options[</span><span>'page_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<a href="'</span><span> . esc_url( get_pagenum_link( $i ) ) . </span><span>'" title="'</span><span> . $page_text . </span><span>'">'</span><span> . $page_text . </span><span>'</a>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> previous_posts_link( $options[<span>'prev_text'</span><span>] ); </span></span>
</li>
<li>
<span> <span>for</span><span>( $i = $start_page;$i <= $end_page;$i++ ){ </span></span>
</li>
<li>
<span> <span>if</span><span>( $i == $paged ){ </span></span>
</li>
<li>
<span> $current_page_text = str_replace( <span>'%PAGE_NUMBER%'</span><span>, number_format_i18n( $i ), $options[</span><span>'current_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<span >'</span><span> . $current_page_text . </span><span>'</span>'</span><span>; </span></span>
</li>
<li>
<span> }<span>else</span><span>{ </span></span>
</li>
<li>
<span> $page_text = str_replace( <span>'%PAGE_NUMBER%'</span><span>, number_format_i18n( $i ), $options[</span><span>'page_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<a href="'</span><span> . esc_url( get_pagenum_link( $i ) ).</span><span>'" title="'</span><span> . $page_text . </span><span>'">'</span><span> . $page_text . </span><span>'</a>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( empty( $query ) ) echo </span><span>'<span id="next-page">'</span><span>; </span></span>
</li>
<li>
<span> next_posts_link( $options[<span>'next_text'</span><span>], $max_page ); </span></span>
</li>
<li>
<span> <span>if</span><span>( empty( $query ) ) echo </span><span>'</span>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( $larger_page_to_show > 0 && $larger_end_page_start < $max_page ){ </span></span>
</li>
<li>
<span> <span>for</span><span>( $i = $larger_end_page_start;$i <= $larger_end_page_end;$i += $larger_page_multiple ){ </span></span>
</li>
<li>
<span> $page_text = str_replace( <span>'%PAGE_NUMBER%'</span><span>, number_format_i18n( $i ), $options[</span><span>'page_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<a href="'</span><span> . esc_url( get_pagenum_link( $i ) ).</span><span>'" title="'</span><span> . $page_text . </span><span>'">'</span><span> . $page_text . </span><span>'</a>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> <span>if</span><span>( $end_page < $max_page ){ </span></span>
</li>
<li>
<span> $last_page_text = str_replace( <span>'%TOTAL_PAGES%'</span><span>, number_format_i18n( $max_page ), $options[</span><span>'last_text'</span><span>] ); </span></span>
</li>
<li>
<span> echo <span>'<a href="'</span><span> . esc_url( get_pagenum_link( $max_page ) ) . </span><span>'" title="'</span><span> . $last_page_text . </span><span>'">'</span><span> . $last_page_text . </span><span>'</a>'</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li>
<span> echo $after; </span>
</li>
<li>
<span>} </span>
</li>
</ol>
</blockquote>
<p>
然后在需要使用分页导航的地方添加下边的代码:</p>
<div>
<div>
<div id="highlighter_503085">
<p>
<span>?</span></p>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code><?php </code><code>if</code><code>( function_exists( </code><code>'Bing_get_pagenavi'</code> <code>) ) Bing_get_pagenavi(); ?></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
</p>
頁:
[1]