不用插件实现WordPress分页

制作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}&amp;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

思章老师

认准了方向,就要勇敢地走下去,十年磨一剑,我相信,只要坚持,一切都有可能。

相关日志

  1. 没有图片

    2011.03.02

    iPad2发布会将于3月3日凌晨开始,期待降价

    消息称,iPad2将于2011年月3日凌晨召…

  2. 没有图片

    2010.05.15

    人这一辈子 养生版

    人这一辈子,怎么都是过,与其皱眉头,不如偷着…

  3. 没有图片

    2010.07.09

    关闭 WordPress 3.0 修订版本、自动保存功能

    WordPress 默认的发布日志的时候,都…

  4. 没有图片

    2011.04.21

    Windows XP死亡倒计时小工具

    Windows XP、Internet Ex…

  5. 没有图片

    2010.12.10

    移除WordPress评论者和内容链接

    期 WordPress Spam 制造者横行…

  6. 2013.01.01

    2013年第一款 WordPress CMS主题: XCMS V1.0发布

    继2012年最后一款主题: X2013 发布…

评论

  1. Firm 2011.01.06 8:35下午

    刚好新搞了一个图片主题,没有分页来着。。