WordPress不使用插件实现分页

来源:互联网 发布:在线视频播放系统源码 编辑:程序博客网 时间:2024/06/05 10:02
WordPress默认的分页只有 “下一页”和 “上一页”. 如果你博客里面文章比较多,想让分页更好看一些的话那我建议你不要使用博客的默认链接,而是使用更漂亮点的分页导航.我的博客中使用的分页就是Habitat . 向下拉就可以在下面看见文章的分页按钮.为啥需要使用它们呢? 因为它们可以让你很简单的就知道文章的导航地址,很容易就知道有多少文章,有多少页.用户体验比较好 :)不过使用插件的话感觉很浪费服务器资源,因为只需要简单的几句php和css代码即可搞定,下面我就来介绍下怎么在主题里面不用插件实现分页吧:

先写方法名

如果你不想知道原因的话就直接复制下面的代码到主题的function.php文件去吧,不过我下面还是来介绍下这些代码:
function kriesi_pagination($pages = '', $range = 2){       $showitems = ($range * 2)+1;       global $paged;     if(empty($paged)) $paged = 1;     if($pages == '')     {         global $wp_query;         $pages = $wp_query->max_num_pages;         if(!$pages)         {             $pages = 1;         }     }        if(1 != $pages)     {         echo "<div class='pagination'>";         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>«</a>";         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹</a>";         for ($i=1; $i <= $pages; $i++)         {             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))             {                 echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";             }         }         if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>›</a>";           if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>»</a>";         echo "</div>n";     }}

怎么使用和一步一步的解释

早默认的page.php文件里面显示分页很简单,只需要下面的这句代码即可 
kriesi_pagination();
加上就行了.这里有两个参数你可以加: 
function kriesi_pagination($pages = '', $range = 2)

第一个是页面的数量: 这个一般在自定义循环查询文章的时候有用,下面我会解释的.第二个参数是设置显示多少链接的. 它用于控制在当前页面之前和之后所显示页面的数量然后再显示箭头. 比如默认的是2,如果你现在访问的是第一页,它就会显示后面两页然后就是箭头,大概是这个样子:

1

假如在上你想直接看到第四页的话,,并且第四页为当前页,那么前面就会显示第2、3页,后面显示第5、6页.其他的都会影藏:2

我们把最大的数据保存到分散的变量里面去:

$showitems = ($range * 2)+1;
接下来使用全局变量$paged. WordPress默认的会把当前的页面存储到这个全局变量里面去的. 如果此变量为空的话我们就设置为1. 为什么? 因为当前的页面应该不需要在下面的分页里面再加链接了, 应该显示为"当前被访问"的.
global $paged;if(empty($paged)) $paged = 1;
现在就得到了当前的访问页面, 不过还得得到总共有多少页. 不过你要确保没有自定义循环查询文章,也就是说$pages在这代码之前是没有被使用的. 只有这样我们才能够再次得到最大的页码:
if($pages == ''){    global $wp_query;    $pages = $wp_query->max_num_pages;    if(!$pages)    {        $pages = 1;    }}
你看到了吧,除了一点逻辑之外我们仅仅只是使用了一个简单的 wordpress 方法 get_pagenum_link() 就搞定了,它可以通过传页码总数就能得到相应的链接地址,如: get_pagenum_link(2)  就会得到像上面所说的大于2页的时候的链接地址.按照我们上面所设定参数,现在通过一些if判断语句就可以获取那些内容需要显示. 我也经常详细得解说代码,不过赶脚在这里真的没必要了. 如果你真的想看懂上面的代码的话, 现在我也大概解释了变量的意思,所以理解去研究也不会很难:)

Css代码

css部分也很简单. 上面的默认分页大概会这样显示html: 
<div class='pagination'> <span class='current'>1</span> <a href="http://www.cnwordpress.com/blog/page/2">2</a> <a href="http://www.cnwordpress.com/blog/page/3">3</a> <a href="http://www.cnwordpress.com/blog/page/2">›</a> <a href="http://www.cnwordpress.com/blog/page/12">»</a></div>
所以也只需要简单的几句css
.pagination {clear:both;padding:20px 0;position:relative;font-size:11px;line-height:13px;}.pagination span, .pagination a {display:block;float:left;margin: 2px 2px 2px 0;padding:6px 9px 5px 9px;text-decoration:none;width:auto;color:#fff;background: #555;}.pagination a:hover{color:#fff;background: #3279BB;}.pagination .current{padding:6px 9px 5px 9px;background: #3279BB;color:#fff;}

高级部分: 自定义文章查询

你或许可能会使用到 自定义查询 , 这个自定义查询的时候是不会默认存储在 $wp_query 对象里面的,我们之前是这么取得最大页码的:
 $pages = $wp_query->max_num_pages;
不过在自定义里面是取不到的,所以你在调用的时候就必须要传入第一个参数.简单的举例吧: 
<?php $additional_loop = new WP_Query("cat=1,2,3&paged=$paged"); ?><?php while ($additional_loop->have_posts()) : $additional_loop->the_post(); ?> <!-- 显示循环的主体部分... --><?php endwhile; ?>
那你就需要这样调用了:
kriesi_pagination($additional_loop->max_num_pages);

感觉使用起来很方便的,不过也不用非要使用这个,你可以使用插件哦 ;)

原创粉丝点击