WordPress让访客选择文章的排序方式

日期: 标签:WordPress教程 162 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

     之前已经有不少网友问我,露兜博客首页的访客可自行选择文章排序方式的效果是怎么做的,因为之前工作都比较忙,很抱歉没有及时给这些网友答复。今天就来给大家分享这个文章排序效果的实现过程吧。

文章排序

     其实实现过程也比较简单,一个是构造链接,另外一个是使用query_posts来改变一下主循环就可以了。

构造链接

     链接主要用于传递GET参数,让PHP程序知道你到底想怎么排序。在主题的index.php中你需要的位置插入以下代码,用于输出排序按钮的HTML,这个排序按钮的样式,你再自己写写css咯。需要注意的是以下代码会自动获取当前用户已选择的排序方式,并给这个排序按钮的 li 添加了class="current":

<h3>文章排序</h3>
<ul>
	<li><a <?php if ( isset($_GET['order']) && ($_GET['order']=='rand') ) echo 'class="current"'; ?> href="<?php echo get_option('home'); ?>/?order=rand" rel="nofollow">随机阅读</a></li>
	<li><a <?php if ( isset($_GET['order']) && ($_GET['order']=='commented') ) echo 'class="current"'; ?> href="<?php echo get_option('home'); ?>/?order=commented" rel="nofollow">评论最多</a></li>
	<li><a <?php if ( isset($_GET['order']) && ($_GET['order']=='alpha') ) echo 'class="current"'; ?> href="<?php echo get_option('home'); ?>/?order=alpha" rel="nofollow">标题排序</a></li>
</ul>

改变主循环

     首先你得先在主题的index.php中找到以下语句:

if (have_posts())

     然后在这句之前添加以下代码:

if ( isset($_GET['order']) )
{
	switch ($_GET['order'])
	{
		case 'rand' : $orderby = 'rand'; break;
		case 'commented' : $orderby = 'comment_count'; break;
		case 'alpha' : $orderby = 'title'; break;
		default : $orderby = 'title';
	}

	global $wp_query;
	$args= array('orderby' => $orderby, 'order' => 'DESC');

	$arms = array_merge($args, $wp_query->query);
	query_posts($arms);
}

if (have_posts())

     好了,就这么简单,复制粘贴,轻轻松松实现排序效果,你...懂了吗?

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/wordpress-visitor-post-order.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

162 条留言

点此留言
1 2 3 419
  1. 侯永禄

    请问在这个如何排除指定分类?我自己试的时候都不行,不知道为什么。

    • Ludou

      @侯永禄 $args= array('orderby' => $orderby, 'order' => 'DESC');
      改成(2,3为排除的分类ID,多个类似)
      $args= array('cat'=> array(-2,-3), 'orderby' => $orderby, 'order' => 'DESC');

  2. NameDomain

    很实用

  3. 好店品

    就是想要实现像虎嗅网里面那个标签分类和可以订阅标签的功能,请问能不能实现,可以实现的话,能不能抽空写个教程什么的呢?

  4. 有点蓝

    这篇文章有更新吗?就是跟你首页一样的那种,带点击最多的排序。

  5. 阿里帮帮

    index.php中没有if (have_posts()),版本为3.71 该如何处理

    • Ludou

      @阿里帮帮 那么你可以查找:get_template_part,可找到类似代码:<?php get_template_part( 'loop', 'page' ); ?>,将loop-page.php中的所有代码替换这部分代码即可。再找 if (have_posts())

      loop和page不同主题不一样,请自行替代

      • 阿里帮帮

        @Ludou 谢谢ludou,在你的指点下网站已完全实现此功能,顺便把你的CSS也掳走了,1:1高仿啊。。以后多送IP以表感谢

  6. seri

    啊,我自己改造了一下,华丽完成之前我一直想要的效果。。。谢谢。。。

  7. 阿里帮帮

    @Ludou 新年好,过个年后我发现目录按“点击最多”排序异常,我是将"alpha" 替换为"views",后来学着贵站将"views"替换为"hot"仍然没有解决问题。不知哪儿出了问题?诚退请教。谢谢!

    • Ludou

      @阿里帮帮 点击最多需要配合浏览计数插件使用,必须使用自定义栏目views,见:
      https://www.ludou.org/wordpress-visitor-post-order.html/comment-page-2#comment-10390

      • 阿里帮帮

        @Ludou 谢谢 @Ludou 兄,已经完全实现了,喜。。元宵节快乐!

  8. UHD高清美图

    这个order请求如何弄成伪静态的呢?我尝试了很多次都不成功,不知道是哪错了。

    但是单独到一个目录用文件做实验又成功了。

  9. zhwangart

    如果放在 archive.php 模板页中,a标签的 href 应该怎么写?

  10. HIHI

    HI.大神,求助个问题,多谢啊!
    用et_query_var('search')在搜索页面时,搜索英文关键词时,有效。搜索中文关键词时候(url链接也是包括中文的),无效。
    在tag页面,tag的url链接中有中文时,却是有效果的。
    一直想不到头绪,求助大神啊,多谢喽!!!

  11. kim

    hi,请问文章内页 如果也想给分类加个class的话。 应该怎么写?

    • 露兜

      @kim 分类有很多不同形式的代码,所以你说的太笼统,抱歉不清楚。

      • kim

        @露兜 比如说你这篇文章的相关分类 是加上一个class 让他高亮的。

      • kim

        @露兜 解决了,用 in_category('xxx') 可以。 参考这里https://www.ludou.org/wordpress-highlight.html

  12. 粉丝

    .用户列表里去掉,姓名这一栏,如何操作?
    谢谢大大. 不胜感激.
    [嘻嘻]

  13. 逆海而行

    露兜,代码一切运行正常,只是在没有选择排序方式的时候class="current是不会添加上去的。请问这个怎么解决。default : $orderby = 'date'; 已经设置了。

    • 露兜

      @逆海而行 <?php if ( !isset($_GET['order']) ) echo 'class="current"'; ?>

      • 逆海而行

        @露兜 解决,谢谢~

  14. 落梵

    博主,如要要使用自定义栏目做这种方式的排序应该怎么做呢?请不吝赐教

    • 露兜

      @落梵 https://www.ludou.org/wordpress-customize-posts-order.html

      • 落梵

        @露兜 这个功能我是想放在分类页面实现,固定分类的自定义栏目就好排序,直接新建个页面。问题是所有分类就……不会代码就是头痛啊。

  15. 灵异事件

    您好,请问根据您这里介绍的,按照点击/评论/随机排序,能否只显示最近一个月的文章?谢谢

  16. kailiuwang

    你好,你的文章很有帮助。
    请教一个问题:
    我站上增加了一个自定义字段key值是grade,view是分数(电影的评分)。
    我想实现按电影的评分排序和文章发布的时间排序。上面的代码需要怎么修改一下?
    自定义字段已经有了,不知道怎么按这个排序!
    谢谢

  17. haguo

    @露大大我想问自定义文章类型又怎样选择排序方式?

  18. Nick

    我的理解不好,想请问大大

    按"标题排序"是按照那个的 …

    文字字节?
    文字长短?

    • 露兜

      @Nick 英文按首字母排序,中文按拼音首字母

  19. Nick

    谢谢 (@_@)

  20. WP大哥哥

    按照方法添加了,可是点击全部到首页了

  21. 花卉说

    前排留言,然后去看下一篇!

1 2 3

发表留言