在前面的文章中我有写过在WordPress中调用热门文章的方法,按浏览量来实现。接下来是在WordPress中调用热门评论(按点赞数、回复数或热度排序)的方法。
要在WordPress中调用热门评论,你可以通过以下几种方法实现:
方法 1:使用 WP_Comment_Query(原生函数)
适合自定义查询评论并按热度排序(需结合自定义字段或回调函数)。
示例代码:按评论点赞数排序
假设你使用自定义字段 comment_likes 记录点赞数:
<?php
$args = array(
'status' => 'approve', // 只查询已审核的评论
'number' => 5, // 显示数量
'orderby' => 'meta_value_num', // 按数字值排序
'meta_key' => 'comment_likes', // 自定义字段名(需提前存储)
'order' => 'DESC', // 降序排列
'post_type' => 'post' // 限制文章类型
);
$hot_comments = get_comments($args);
if ($hot_comments) {
foreach ($hot_comments as $comment) {
echo '<div class="hot-comment">';
echo '<a href="' . get_comment_link($comment) . '">';
echo get_comment_author($comment) . '</a>:';
echo wp_trim_words($comment->comment_content, 15, '...'); // 截取评论内容
echo '<span>(点赞:' . get_comment_meta($comment->comment_ID, 'comment_likes', true) . ')</span>';
echo '</div>';
}
}
?>
方法 2:使用插件(推荐)
1. Disqus 或 Jetpack 评论系统
- Disqus:自带热门评论模块,需替换WordPress默认评论系统。
- Jetpack:启用「评论」模块后,可通过短代码
[jetpack_top_comments]调用。
2. WP Discuz 插件
WP Discuz 支持评论点赞和热门排序:
- 安装并启用插件。
- 在评论设置中开启「投票/点赞」功能。
- 使用以下代码调用热门评论:
$args = array(
'orderby' => 'by_vote', // 按投票数排序(插件提供的参数)
'number' => 5
);
$hot_comments = get_comments($args);
方法 3:按评论回复数排序
如果热度定义为“回复数最多”,可通过以下SQL查询实现:
<?php
global $wpdb;
$hot_comments = $wpdb->get_results(
"SELECT c.*, COUNT(r.comment_ID) as reply_count
FROM $wpdb->comments c
LEFT JOIN $wpdb->comments r ON r.comment_parent = c.comment_ID
WHERE c.comment_approved = 1
GROUP BY c.comment_ID
ORDER BY reply_count DESC
LIMIT 5"
);
foreach ($hot_comments as $comment) {
echo '<div>' . get_comment_author($comment) . '(回复数:' . $comment->reply_count . ')</div>';
}
?>
方法 4:结合缓存优化
热门评论查询可能影响性能,建议使用 transient 缓存结果:
$cached_comments = get_transient('hot_comments_cache');
if (false === $cached_comments) {
$args = array(/* 查询参数 */);
$cached_comments = get_comments($args);
set_transient('hot_comments_cache', $cached_comments, 12 * HOUR_IN_SECONDS);
}
注意事项
- 自定义字段依赖:
如果按点赞数排序,需提前通过add_comment_meta()存储数据(可通过插件或自定义代码实现)。 - 性能问题:
直接SQL查询效率高,但缺乏WP原生函数的安全性检查,需自行过滤参数。 - 显示样式:
可通过CSS美化输出内容,例如添加头像:echo get_avatar($comment->comment_author_email, 50); // 显示50px头像
