详解让WordPress实现列表页先显示置顶文章的解决方案

2015-09-11 13:56 栏目:技术开发 查看(11981)

至于WordPress是什么?大家不知道的可以百度、谷歌去补脑。而关于我对WordPress的描述,大家可以参考《完善的解决方案实现WordPress让聚合模块优先显示置顶文章》这篇文章,而其实现在的这篇文章跟篇文章是类似的,都是关于置顶的,只是那篇是关于聚合模块的,而这里是列表页面的。如下图:

xxx

因此,关于文章中需要的一些废话大家也可以参考我上面的那篇文章,我们就不需要重复了。我们的需求是:在WordPress的分类列表中先把置顶的文章显示出来,然后再显示普通的文章(不包含置顶的),当然一般来讲我们不希望除第一位外的其他页面还显示置顶的文章,此外还有就是我们要考虑子分类进来。下面就直接贴出代码来,在代码中详细说明吧,下面是实现该需求的核心代码:

/*
预处理工作:获得当前分类的ID,如果它有子分类就同时获得她所有的子分类ID
如果这步不做,那么就会出现问题,比如ID=1下面有ID为2、3、5,那么当我们打开父分类ID=1时将没有数据显示。
*/
//创建一个数组catarr,它就是包含所有的ID号的
$catarr=array();
//首先,把自己放进去
$catarr[]=$cat;
//获取当前分类子分类信息
$categories = get_categories('child_of='.$cat);
//循环上述资源,依次把子分类ID放入数组(如果有)
foreach($categories as $value){
$catarr[]=$value->term_id;
/*
显示置顶信息开始---
*/
//条件依次为所属指定的分类(当前及其子类)、置顶的
$args=array('cat' => $catarr,'post__in' => get_option('sticky_posts'));
query_posts($args);
//if是为了让只有第一页显示置顶的,当然这个if可以放在其他的位置,放在最开始都可以,也就是到了第二页以后我们这篇文章都不需要了,因为不置顶了,哈哈
if($paged==0) :while(have_posts()) : the_post();
//输出html等内容....
endwhile;wp_reset_query();endif;
/*
普通文章开始---
*/
//循环走起来,注意这里加了一个continue,就是忽略掉置顶的
if ( have_posts() ) : while(have_posts()) : the_post();
if(is_sticky()) : continue; endif;
//输出html等内容....
endwhile;wp_reset_query();endif;

上面的需求是一开始显示所有的置顶文章,如果一个网站运营了好几年了,那么这一个分类及其子分类可能就已经有了很多的置顶文章。如果我们想在列表中只显示有限的几条(比如5条),这样就可以避免太多置顶的让用户感觉网站没更新一样。过去WordPress默认的置顶,大家的做法可能是一个置顶一段时间后取消。

为了运营更加方便,现在加一个需求,就是只把最新的几条数据置顶显示,其他的置顶文章在列表中显示跟普通文章一样的。这个时候我们只需要稍微修改上面的核心代码即可。

//把$args改成,实际上就为了加个约束最新的5条才显示出来
$args=array('cat' => $catarr,'post__in' => get_option('sticky_posts'),'showposts' => 5);
//然后在$args2前加上,依次获得将被显示出来的这5条置顶文章的ID,并一次送入数组$dingarr。
$dingarr=array();
$ding=query_posts($args);
foreach($ding as $value){
   $dingarr[]=$value->ID;
}
//把continue的条件换一下
if(in_array($post->ID,$dingarr)) : continue; endif;

实际上上面用continue来跳开置顶的,可以说基本上解决了我们所需要的,但其实不是极其完美的。而如果使用query_posts()、WP_Query()来就需要考虑分页等问题,就相对来复杂了;我个人在本次项目中采用的是continue语句,可以说我要的需求实现了,但在一些极端需求下是需要进一步处理的,比如每页显示20条,第二页有10条被置顶了,那么第二页就只显示剩下的10条了(当然这是非常极端的,谁没事置顶那么多,就算置顶这么多一般说明有了很多数据,也很难集中在某一页)。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:详解让WordPress实现列表页先显示置顶文章的解决方案 - 微构网络
分享: