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

至于WordPress是什么?大家不知道的可以百度、谷歌去补脑。而关于我对WordPress的描述,大家可以参…

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

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

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

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

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

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

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

类别:WordPress技巧

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册