WordPress实现文章按最新评论时间排序

2022-03-08 0 1,314

WordPress的首页、分类页、标签页等存档页,默认是按照发布时间文章进行排序的,现在想按最新评论时间排序,其实这个功能就是类似论坛帖子列表效果,新发布的帖子置顶,有新评论的帖子也同样置顶,这样做的好处是可以增加互动,增加帖子评论数。在WordPress下也是可以实现这样的功能:

  • 新发布(新更改)的文章排在顶部
  • 有新评论的文章立即排到顶部
  • 所有文章按照其最新一条评论的时间排序

实现的方法是给每篇文章添加一个自定义字段_commentTime,这个字段的值为最新一条评论的时间,然后使用query_posts函数实现所有文章按照自定义字段_commentTime的值进行排序。实现原理就这么简单,下面讲讲具体的实现方法:

一、给所有文章添加自定义字段_commentTime

给每篇文章添加这个自定义字段的目的是为了方便对文章进行排序。可能叫你手动一篇一篇文章地添加自定义字段,尤其是你有几百上千篇文章的情况下,一定会是你抓狂。不过请你放心,我不会让你用这么做,这里我写了个PHP脚本,可以帮你自动给所有文章添加字段_commentTime。使用方法:下载以下文件,然后上传到跟wp-config.php相同的目录(就是WordPress的安装目录)下,然后在浏览器中运行这个文件,如 http://WordPress的安装目录地址/meta-sql.php  下载地址:https://pan.freexyz.cn/s/0movjict

二、添加相应action代码

这一步添加的代码可以实现发布新文章(或新更改)、有新评论的时候,自动添加/更新自定义字段_commentTime的值,不需要你手动干预。在你当前使用主题的functions.php中添加以下php代码:

/**
 * WordPress实现文章按最新评论时间排序,action代码
 * 作者:露兜
 * 博客:https://www.ludou.org/
 * 最后修改:2014年7月16日
 */

function ludou_comment_meta_add($post_ID)  {
   // 发布新文章或修改文章,更新/添加_commentTime字段值
   global $wpdb;
   if(!wp_is_post_revision($post_ID)) {
      update_post_meta($post_ID, '_commentTime', time());
   }
}

function ludou_comment_meta_update($comment_ID)  {
   // 发布新评论更新_commentTime字段值
   $comment = get_comment($comment_ID);
   $my_post_id = $comment->comment_post_ID;
   update_post_meta($my_post_id, '_commentTime', time());
}

function ludou_comment_meta_delete($post_ID)  {
   // 删除文章同时删除_commentTime字段
   global $wpdb;
   if(!wp_is_post_revision($post_ID)) {
      delete_post_meta($post_ID, '_commentTime');
   }
}
add_action('save_post', 'ludou_comment_meta_add');
add_action('delete_post', 'ludou_comment_meta_delete');
add_action('comment_post', 'ludou_comment_meta_update');

三、query_posts更改文章排序

如果你只想实现首页的文章按最新评论时间排序,那么此步只修改主题目录下的index.php即可,如果还想修改其他存档页面如分类页、标签页等,那就修改相应的模板文件,如archive.php。

举例说明,在index.php中查找代码 if (have_posts()) 或 while (have_posts()),在上一行添加query_posts函数即可:

if(!$wp_query) 
   global $wp_query;

$args = array(
   'meta_key' => '_commentTime',
   'orderby'   => 'meta_value_num',  // WordPress 2.8以上版本
   'order' => DESC
);
$args = array_merge( $args, $wp_query->query );
query_posts($args);

对archive.php的修改也一样!如果对query_posts的用法不熟悉,可以看这篇文章: WordPress函数query_posts用法汇总

数据库清理脚本

如果某一天你不想使用这个功能了,你可以下载以下文件帮助你自动清理数据库中的无用信息,放到WordPress的安装目录下,然后在浏览器中执行一下就可以了,如http://example/meta-clear-sql.php 下载地址:https://pan.freexyz.cn/s/ielxz554

好了,全部教程到此就结束了,完成以上步骤后就什么都不用管了,文章就是按照最新评论时间进行排序了。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 WordPress教程 WordPress实现文章按最新评论时间排序 http://www.20zxx.cn/364651/wordpres/wordpressq.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务