浩男爸 發表於 2023-6-28 00:00:00

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>'&lt;ARticle &gt;'</span><span>, $after = </span><span>'&lt;/article&gt;'</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> =&gt; </span><span>'%CURRENT_PAGE%/%TOTAL_PAGES%'</span><span>, </span></span>
</li>
<li>
<span>    <span>'current_text'</span><span> =&gt; </span><span>'%PAGE_NUMBER%'</span><span>, </span></span>
</li>
<li>
<span>    <span>'page_text'</span><span> =&gt; </span><span>'%PAGE_NUMBER%'</span><span>, </span></span>
</li>
<li>
<span>    <span>'first_text'</span><span> =&gt; __( </span><span>'« 首页'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span>    <span>'last_text'</span><span> =&gt; __( </span><span>'尾页 »'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span>    <span>'next_text'</span><span> =&gt; __( </span><span>'»'</span><span>, </span><span>'Bing'</span><span> ), </span></span>
</li>
<li>
<span>    <span>'prev_text'</span><span> =&gt; </span><span>'«'</span><span>, </span></span>
</li>
<li>
<span>    <span>'dotright_text'</span><span> =&gt; </span><span>'...'</span><span>, </span></span>
</li>
<li>
<span>    <span>'dotleft_text'</span><span> =&gt; </span><span>'...'</span><span>, </span></span>
</li>
<li>
<span>    <span>'num_pages'</span><span> =&gt; 5, </span></span>
</li>
<li>
<span>    <span>'always_show'</span><span> =&gt; 0, </span></span>
</li>
<li>
<span>    <span>'num_larger_page_numbers'</span><span> =&gt; 3, </span></span>
</li>
<li>
<span>    <span>'larger_page_numbers_multiple'</span><span> =&gt; 10 </span></span>
</li>
<li>
<span>  ) ); </span>
</li>
<li>
<span>  <span>if</span><span>( $wp_query-&gt;max_num_pages &lt;= 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-&gt;request; </span>
</li>
<li>
<span>    $numposts = $query-&gt;found_posts; </span>
</li>
<li>
<span>    $max_page = $query-&gt;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-&gt;request; </span>
</li>
<li>
<span>    $numposts = $wp_query-&gt;found_posts; </span>
</li>
<li>
<span>    $max_page = $wp_query-&gt;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 &lt;= 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 &gt; $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 &lt;= 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 &lt;= 0 ) $larger_start_page_start = $larger_page_multiple; </span></span>
</li>
<li>
<span>  <span>if</span><span>( $larger_start_page_end &gt; $max_page ) $larger_start_page_end = $max_page; </span></span>
</li>
<li>
<span>  <span>if</span><span>( $larger_end_page_end &gt; $max_page ) $larger_end_page_end = $max_page; </span></span>
</li>
<li>
<span>  <span>if</span><span>( $max_page &gt; 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>'&lt;span &gt;'</span><span> . $pages_text . </span><span>'&lt;/span&gt;'</span><span>; </span></span>
</li>
<li>
<span>    <span>if</span><span>( $start_page &gt;= 2 &amp;&amp; $pages_to_show &lt; $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>'&lt;a href="'</span><span> . esc_url( get_pagenum_link() ) . </span><span>'"  title="'</span><span> . $first_page_text . </span><span>'"&gt;'</span><span> . $first_page_text . </span><span>'&lt;/a&gt;'</span><span>; </span></span>
</li>
<li>
<span>    } </span>
</li>
<li>
<span>    <span>if</span><span>( $larger_page_to_show &gt; 0 &amp;&amp; $larger_start_page_start &gt; 0 &amp;&amp; $larger_start_page_end &lt;= $max_page ){ </span></span>
</li>
<li>
<span>      <span>for</span><span>( $i = $larger_start_page_start;$i &lt; $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>'&lt;a href="'</span><span> . esc_url( get_pagenum_link( $i ) ) . </span><span>'"  title="'</span><span> . $page_text . </span><span>'"&gt;'</span><span> . $page_text . </span><span>'&lt;/a&gt;'</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 &lt;= $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>'&lt;span &gt;'</span><span> . $current_page_text . </span><span>'&lt;/span&gt;'</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>'&lt;a href="'</span><span> . esc_url( get_pagenum_link( $i ) ).</span><span>'"  title="'</span><span> . $page_text . </span><span>'"&gt;'</span><span> . $page_text . </span><span>'&lt;/a&gt;'</span><span>; </span></span>
</li>
<li>
<span>      } </span>
</li>
<li>
<span>    } </span>
</li>
<li>
<span>    <span>if</span><span>( empty( $query ) ) echo </span><span>'&lt;span id="next-page"&gt;'</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>'&lt;/span&gt;'</span><span>; </span></span>
</li>
<li>
<span>  } </span>
</li>
<li>
<span>  <span>if</span><span>( $larger_page_to_show &gt; 0 &amp;&amp; $larger_end_page_start &lt; $max_page ){ </span></span>
</li>
<li>
<span>    <span>for</span><span>( $i = $larger_end_page_start;$i &lt;= $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>'&lt;a href="'</span><span> . esc_url( get_pagenum_link( $i ) ).</span><span>'"  title="'</span><span> . $page_text . </span><span>'"&gt;'</span><span> . $page_text . </span><span>'&lt;/a&gt;'</span><span>; </span></span>
</li>
<li>
<span>    } </span>
</li>
<li>
<span>  } </span>
</li>
<li>
<span>  <span>if</span><span>( $end_page &lt; $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>'&lt;a href="'</span><span> . esc_url( get_pagenum_link( $max_page ) ) . </span><span>'"  title="'</span><span> . $last_page_text . </span><span>'"&gt;'</span><span> . $last_page_text . </span><span>'&lt;/a&gt;'</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>&lt;?php </code><code>if</code><code>( function_exists( </code><code>'Bing_get_pagenavi'</code> <code>) ) Bing_get_pagenavi(); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
 </p>
頁: [1]
查看完整版本: WordPress主题中添加文章列表页页码导航的PHP代码实例