给你的WordPress自定义分页

September 9, 2008 - by Macji - HTML/CSS/JS/PHP - php, WordPress, plugin

WordPress自带的分页不好用,只有上一页,下一页。感觉不爽,google了几下,分页插件倒是有,下过来想安装,但感觉代码太多,看了一下 wp-pagenavi 的分页插件,发现它怎么没写SQL,原来是我白痴了一回,$request = $wp_query->request;就能得到,而且$wp_query->max_num_pages就能得到最多页数,有了这个参数,自己写完全没有问题。于是瞎捣鼓写了一个分页。

效果如我博客分页一致,最多显示5个页码,也就是1 2 3 4 5,2 3 4 5 6,3 4 5 6 7这种。那这种分页有三种情况:


  1. 少于或者等于5页时,始终显示1 2 3 4 5

  2. 页数在最后3个页数时,始终显示最后5页

  3. 其他都是加2减2

  4. 附加功能,显示 首页 上一页 下一页 末页,情况在不是第一页和最后一个

那么就可以动手写了。


function mj_pagenav() {
    global $wpdb, $wp_query;
    if (!is_single()) {
        $CycNum = 5;	//最多页数
        $maxPage = $wp_query->max_num_pages;		//最多页数
        $paged = intval(get_query_var('paged')) === 0 ? 1 : intval(get_query_var('paged')) ;	//paged=? 参数
        $Button = array("首页","上一页","下一页","未页");
        if($paged - 2 <= 1){
            $FirstNum   =  1;
            $LastNum   =  min($maxPage, $CycNum);
        }elseif($maxPage - $paged <= 2){
            $FirstNum   =  ($maxPage - 4 == 0) ? 1 : ($maxPage - 4);
            $LastNum   =  $maxPage;
        }else{
            $FirstNum   =  $paged - 2;
            $LastNum   =  $paged + 2;
        }
        //输出 首页 上一页
        echo ( 1 >= $paged ) ? '' 
            : '<a href="' .get_option('siteurl') . '/">' . $ButtonArray[0] . '</a>
                <a href="' .get_option('siteurl') . '/page/' . ($paged - 1) . '/">' . $ButtonArray[1] . '</a>';
        //输出 页码
        for($i = $FirstNum; $i <= $LastNum; $i++){
            if ( $i == $paged ){
                $pageText = '<a href="' .get_option('siteurl') . '/page/' . $i . '/"><em>' . $i . '</em></a>';
            }else{
                $pageText = '<a href="' .get_option('siteurl') . '/page/' . $i . '/">' . $i . '</a>';
            }
            echo  $pageText;
        }
        //输出 下一页 末页
        echo ($max_page == $paged ) ? '' 
            : '<a href="' .get_option('siteurl') . '/page/' . ($paged + 1) . '/">'. $ButtonArray[2] .'</a>
                <a href="' .get_option('siteurl') . '/page/' . ($max_page) . '/">'. $ButtonArray[3] .'</a>';
    }
}

代码比较简单,“上一页 下一页” 我都整在一行,将就着看。把mj_pagenav()放到该放的地方,简单的分页就弄好了,复杂的分页就再加几行代码(我这里把/page/xx写死了,只适应首页哈,搜索和存档等其它页的分页有空再改一下,-__-)。

本博客所有文章遵循创作共用版权协议,要求署名、非商业、保持一致。转载时请先阅读以上许可协议,并以超链接形式注明出处。
这篇文章发表于2008年09月09日 11:59:43, 并被分类于HTML/CSS/JS/PHP. 您可以通过订阅 RSS 2.0 跟踪对这篇文章的评论, 也可以发表你的评论, 或者在您自己的网站中引用(trackback)该篇日志.

已有 9 条评论

  1. 明城 : September 9, 2008 - Permalink

    大哥,求你了。代码打个包不麻烦的……

  2. Macji : September 9, 2008 - Permalink

    嗯,有空好好整理一下。。

  3. 小乐 : September 9, 2008 - Permalink

    如果你觉得你一个人战斗可以的话。你尽可以发挥你的才智和勇气!

  4. Mars : September 9, 2008 - Permalink

    我的友情链接没拉。鸡鸡

  5. Macji : September 9, 2008 - Permalink

    sorry,上次整理blog,数据都丢了 ,链接也都懒的加回去,挖哈哈,8过现在加上了。

  6. shamas : September 9, 2008 - Permalink

    那个搜索存档的什么时候可以弄啊,呵期待

  7. 网友 : September 9, 2008 - Permalink

    我好像来过你的博客了。不过既然来了。给你留点东西吧 (*^__^*) 嘻嘻……

  8. alanfly : September 9, 2008 - Permalink

    用了一下,貌似第一页和第二页的内容是一样的~~

  9. alanfly : September 9, 2008 - Permalink

    is_archive = true; $wp_query->is_home = false;?>

    我使用了这个在首页显示特定分类的文章
    原文在这:http://smartr.cn/wordpress/how-to-use-query-posts-in-wordpress.html

发表评论

添加新评论