不用插件实现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.01.12

    没有完美的个人,只有完美的团队

    成功源于接纳包容,因为你不可能变得十全十美,…

  2. 没有图片

    2010.05.12

    WordPress 不用插件实现相关日志的办法

    Wordpress 的可以实现相关日志功能的…

  3. 没有图片

    2010.08.16

    WordPress 3.0.1 官方中文版终于发布

    自从WordPress2.9.2中文版发布之…

  4. 没有图片

    2011.01.22

    WordPress 多站点使用防垃圾评论 Akismet

    WordPress防垃圾评论插件Akisme…

  5. 没有图片

    2011.01.14

    给WordPress的下载链接自动添加图片

    有时想让你的下载链接直接变成漂亮的图片按钮,…

  6. 没有图片

    2011.03.10

    15款 WordPress 移动设备主题

    随着科技的发展,广大网友除了用计算机上网外,…

评论

  1. Firm 2011.01.06 8:35下午

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