Macji Pro2010

记录一些应该记录的东东

给你的WordPress自定义分页

September 10, 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写死了,只适应首页哈,搜索和存档等其它页的分页有空再改一下,-__-)。

9 条评论»