WordPress让访客选择文章的排序方式
日期:
标签:WordPress教程
如需帮忙改代码,或者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
请问在这个如何排除指定分类?我自己试的时候都不行,不知道为什么。
@侯永禄 $args= array('orderby' => $orderby, 'order' => 'DESC');
改成(2,3为排除的分类ID,多个类似)
$args= array('cat'=> array(-2,-3), 'orderby' => $orderby, 'order' => 'DESC');
很实用
就是想要实现像虎嗅网里面那个标签分类和可以订阅标签的功能,请问能不能实现,可以实现的话,能不能抽空写个教程什么的呢?
这篇文章有更新吗?就是跟你首页一样的那种,带点击最多的排序。
index.php中没有if (have_posts()),版本为3.71 该如何处理
@阿里帮帮 那么你可以查找:get_template_part,可找到类似代码:<?php get_template_part( 'loop', 'page' ); ?>,将loop-page.php中的所有代码替换这部分代码即可。再找 if (have_posts())
loop和page不同主题不一样,请自行替代
@Ludou 谢谢ludou,在你的指点下网站已完全实现此功能,顺便把你的CSS也掳走了,1:1高仿啊。。以后多送IP以表感谢
啊,我自己改造了一下,华丽完成之前我一直想要的效果。。。谢谢。。。
@Ludou 新年好,过个年后我发现目录按“点击最多”排序异常,我是将"alpha" 替换为"views",后来学着贵站将"views"替换为"hot"仍然没有解决问题。不知哪儿出了问题?诚退请教。谢谢!
@阿里帮帮 点击最多需要配合浏览计数插件使用,必须使用自定义栏目views,见:
https://www.ludou.org/wordpress-visitor-post-order.html/comment-page-2#comment-10390
@Ludou 谢谢 @Ludou 兄,已经完全实现了,喜。。元宵节快乐!
这个order请求如何弄成伪静态的呢?我尝试了很多次都不成功,不知道是哪错了。
但是单独到一个目录用文件做实验又成功了。
如果放在 archive.php 模板页中,a标签的 href 应该怎么写?
HI.大神,求助个问题,多谢啊!
用et_query_var('search')在搜索页面时,搜索英文关键词时,有效。搜索中文关键词时候(url链接也是包括中文的),无效。
在tag页面,tag的url链接中有中文时,却是有效果的。
一直想不到头绪,求助大神啊,多谢喽!!!
@HIHI 不清楚。没见过。
hi,请问文章内页 如果也想给分类加个class的话。 应该怎么写?
@kim 分类有很多不同形式的代码,所以你说的太笼统,抱歉不清楚。
@露兜 比如说你这篇文章的相关分类 是加上一个class 让他高亮的。
@露兜 解决了,用 in_category('xxx') 可以。 参考这里https://www.ludou.org/wordpress-highlight.html
.用户列表里去掉,姓名这一栏,如何操作?
谢谢大大. 不胜感激.
[嘻嘻]
露兜,代码一切运行正常,只是在没有选择排序方式的时候class="current是不会添加上去的。请问这个怎么解决。default : $orderby = 'date'; 已经设置了。
@逆海而行 <?php if ( !isset($_GET['order']) ) echo 'class="current"'; ?>
@露兜 解决,谢谢~
博主,如要要使用自定义栏目做这种方式的排序应该怎么做呢?请不吝赐教
@落梵 https://www.ludou.org/wordpress-customize-posts-order.html
@露兜 这个功能我是想放在分类页面实现,固定分类的自定义栏目就好排序,直接新建个页面。问题是所有分类就……不会代码就是头痛啊。
您好,请问根据您这里介绍的,按照点击/评论/随机排序,能否只显示最近一个月的文章?谢谢
你好,你的文章很有帮助。
请教一个问题:
我站上增加了一个自定义字段key值是grade,view是分数(电影的评分)。
我想实现按电影的评分排序和文章发布的时间排序。上面的代码需要怎么修改一下?
自定义字段已经有了,不知道怎么按这个排序!
谢谢
@露大大我想问自定义文章类型又怎样选择排序方式?
我的理解不好,想请问大大
按"标题排序"是按照那个的 …
文字字节?
文字长短?
@Nick 英文按首字母排序,中文按拼音首字母
谢谢 (@_@)
按照方法添加了,可是点击全部到首页了
前排留言,然后去看下一篇!