網生@誌 | zEUS.'Blog

首页 » Wordpress研究 » 2009-06-2 »

剔除 D&Z Theme 主题“热评日志”列表中的页面

字体大小:T | T

这是一个困扰我很久的问题,D&Z Theme 主题侧栏顶部 Tab 栏里的“热评日志”列表中排名前2位的文章是“给我留言”和“主题模板”,而实际上这两篇“文章”是开启了评论的 WordPress 页面而非日志。所以从严格的意义上来讲,这种排列是有误的。于是我就琢磨如何在“热评日志”的统计中去掉“页面”,其实理论上办法是很简单的——“热评日志”是我从 WordPress 工具箱插件中提取出来的功能,它通过一条 SQL 查询语句就生成了该列表,那么我只需要在这个 SQL 语句中加入一个排除“页面”的条件就行了。不过由于对 WordPress 数据库表结构不熟悉,导致我一直未能解决该问题。

今天在查询 WordPress 官方文档的时候发现了:Database Description ,在 wp_posts 表里存在一个字段:post_type,从字面上理解这个字段肯定跟“日志”和“页面”的判断有关。于是我就查看了一下本地的 WordPress 数据库,果然在 wp_posts 表的 post_type 字段里有4个值:attachment、page、post 和 revision ,虽然不知道 attachment 和 revision 是干嘛的,但是有 page 和 post 就足够了!

那么,我们打开 D&Z Theme 主题文件里的 functions.php 找到 // Get Top Commented Posts 这条注释,该注释下面的代码就是提供“热评日志”列表的,其中的 SQL 语句是:

1
SELECT  $tableposts.ID AS ID, post_title, post_name, COUNT($tablecomments.comment_post_ID) AS 'comment_total' FROM $tableposts LEFT JOIN $tablecomments ON $tableposts.ID = $tablecomments.comment_post_ID WHERE comment_approved = '1' AND post_date < '".date("Y-m-d H:i:s", (time() + ($time_difference * 3600)))."' AND post_status = 'publish' AND post_password = '' GROUP BY $tablecomments.comment_post_ID ORDER  BY comment_total DESC LIMIT $limit

写得还是有点小复杂的,不过没事,我们只要在 末尾处的

1
GROUP BY $tablecomments.comment_post_ID ORDER  BY comment_total DESC LIMIT $limit");

的前面加上(注意空格)

1
 AND post_type = 'post'

将 wp_posts 判断为 post 的条件就行了。

最后保存修改,下回到首页即可看到效果了~

zEUS.

« »

已经有91人发表了评论

  1. 热门与否,我觉得应该用点击量+评论数+引用量来加权计算,单独使用某种指标都会有各种各样的问题

  2. 你实在太帅了!我被这个问题困扰了很久,终于得到解决了

发表您的看法

TOP COMMENTS BOTTOM