不用插件实现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. 没有图片

    2010.06.05

    Google Logo纪念丹尼斯·伽伯(Dennis Gabor)诞辰

    6月5日是英国籍匈牙利裔物理学家是丹尼斯·伽…

  2. 没有图片

    2011.01.10

    WordPress侧边栏上自定义登录框

    有时方便登陆,特别是多用户博客,需要在首页添…

  3. 没有图片

    2010.05.08

    2009年度国外获奖Flash网站欣赏

    2009年度获奖Flash网站精品收藏,有个…

  4. 没有图片

    2010.11.02

    PSD to HTML工作标准

    一.每个psd源图都有三种配色方案,要求按照…

  5. 没有图片

    2011.05.27

    Gregarius安装错误和写入数据库乱码等问题的方法

    Gregarius官方网站: http://…

  6. 没有图片

    2010.05.07

    美国“国父”约翰·亚当斯的一句话

    约翰·亚当斯是美国“国父”之一,曾经写下这样…

评论

  1. Firm 2011.01.06 8:35下午

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

About

马拉松运动员,沉迷于跑步;关注科技前沿,关注互联网!与跑者、程序员、设计师为伍,一起跑步健身,一起编写程序,为自由而战!