制作WP主题要用到分页,下面是几种不用插件实现WordPress分页的方法:
将下面代码拷贝到functions.php文件中:
/* Mini Pagenavi v1.0 by Willin Kan. */
function pagenavi( $p = 2 ) { // 取當前頁前後各 2 頁
if ( is_singular() ) return; // 文章與插頁不用
global $wp_query, $paged;
$max_page = $wp_query->max_num_pages;
if ( $max_page == 1 ) return; // 只有一頁不用
if ( empty( $paged ) ) $paged = 1;
// echo ‘<span>Page: ‘ . $paged . ‘ of ‘ . $max_page . ‘ </span> ‘; // 頁數
if ( $paged > $p + 1 ) p_link( 1, ‘最前頁’ );
if ( $paged > $p + 2 ) echo ‘… ‘;
for( $i = $paged – $p; $i <= $paged + $p; $i++ ) { // 中間頁
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print “<span class=’page-numbers current’>{$i}</span> ” : p_link( $i );
}
if ( $paged < $max_page – $p – 1 ) echo ‘… ‘;
if ( $paged < $max_page – $p ) p_link( $max_page, ‘最後頁’ );
}
function p_link( $i, $title = ” ) {
if ( $title == ” ) $title = “第 {$i} 頁”;
echo “<a class=’page-numbers’ href='”, esc_html( get_pagenum_link( $i ) ), “‘ title='{$title}’>{$i}</a> “;
}
// — END —————————————-
然后在使用分页的地方加上代码:
<?php pagenavi(); ?>
括號中的參數是前後頁數, 可不加參數.
例: pagenavi(3); 就是取當前頁前後各 3 頁 (不計最前頁、最後頁及當前頁), 最大總數為 9 頁. 若不足 3 頁, 有多少取多少.
pagenavi(); 默認值為 2, 所以不加參數就是前後各取 2 頁, 最大總數為 7 頁, 一般都夠.
為了配合 css, 也許還要加 div 來嵌入, 這要看你的模板怎麼寫.
另外, 為了防止主題已有 pagenavi() 函數, 可以加上 if ( !function_exists(‘pagenavi’) ) { … } 來避免沖突.
引用的時候也可先判斷函數是否已定義: if (function_exists(‘pagenavi’)) { pagenavi(); }
css 的部份是和評論翻頁 paginate_comments_links() 共用的, 可能你的模板已經有了, 沒有的話可參考我的:
在你的CSS样式表文件中添加:
.page-numbers {margin:10px 2px; padding:1px 8px; text-decoration:none; background:#878e87; color:#fff;}
.page-numbers:hover {background:#777e77; color:#bbc0bb;}
.current, .current:hover{cursor:default; background:#292e2b; color:#9ba09b; border:1px solid #292e2b;}
pagenavi() 是用在 home、archive、index 的翻頁,
評論翻頁是用 paginate_comments_links(),
文章翻頁是用 wp_link_pages(),
以上三個函數很相像, 請勿混淆.
後記: 不小心在 Mcooo Blog 發現了 Mini Pagenavi 老祖宗 — http://mcooo.com/google-page-for-wordpress.html, Mini Pagenavi 剛開始就是由這段代碼改寫而來, 現在已是繁衍好幾代了.
paginate_links()
另外一種方法, 是用 WordPress 自帶的 paginate_links() 函數: http://codex.wordpress.org/Function_Reference/paginate_links
<?php paginate_links( $args ) ?>
按照它那頁的例子, 我稍微修改了一下:
function pagenavi() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars[‘paged’] > 1 ? $current = $wp_query->query_vars[‘paged’] : $current = 1;$pagination = array(
‘base’ => @add_query_arg(‘paged’,’%#%’),
‘format’ => ”,
‘total’ => $wp_query->max_num_pages,
‘current’ => $current,
‘show_all’ => false,
‘type’ => ‘plain’,
‘prev_text’ => ‘« ‘,
‘next_text’ => ‘ »’
);if( $wp_rewrite->using_permalinks() )
$pagination[‘base’] = user_trailingslashit( trailingslashit( remove_query_arg(‘s’,get_pagenum_link(1) ) ) . ‘page/%#%/’, ‘paged’);if( !empty($wp_query->query_vars[‘s’]) )
$pagination[‘add_args’] = array(‘s’=>get_query_var(‘s’));echo paginate_links($pagination);
}
喜歡用哪個就挑哪個, 速度和效果都差不多.
密技公開
最後, 還是把我這邊用的公開一下, 已經避開了 get_pagenum_link() 函數, 速度最快, 但只適用於默認的鏈接形式:
/* Mini Pagenavi v1.0+ by Willin Kan. */
function pagenavi( $p = 2 ) {
global $wp_query, $paged;
$max_page = $wp_query->max_num_pages;
if ( $max_page == 1 ) return;
if ( empty( $paged ) ) $paged = 1;
$request = $_SERVER[‘REQUEST_URI’];
$tmp = strpos($request, ‘paged’);
if ( $tmp ) $request = substr($request, 0, $tmp – 1);
echo “<div id=”pagenavi”>n”;
if ( $paged > $p + 1 ) p_link( 1, $request, ‘最前頁’ );
if ( $paged > $p + 2 ) echo ” <span class=’dots’> … </span>n”;
for( $i = $paged – $p; $i <= $paged + $p; $i++ ) {
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print ” <span class=’page-numbers current’>{$i}</span>n” : p_link( $i, $request );
}
if ( $paged < $max_page – $p – 1 ) echo ” <span class=’dots’> … </span>n”;
if ( $paged < $max_page – $p ) p_link( $max_page, $request, ‘最後頁’ );
echo “</div>n”;
}
function p_link( $i, $request, $title = ” ) {
if ( $title == ” ) $title = “第 {$i} 頁”;
$request = ( $i == 1 ) ? $request : ( strpos($request, ‘?’) ? “{$request}&paged={$i}” : “?paged={$i}” );
echo “<a class=’page-numbers’ href='{$request}’ title='{$title}’>{$i}</a> “; // 用 $request 取代 get_pagenum_link()
}
// — END —————————————-
有興趣的話, 可以將上面這段改成你所用的鏈接形式.
此文转自:http://kan.willin.org/?p=1323
刚好新搞了一个图片主题,没有分页来着。。