如何给网站添加评论者等级功能?

今天在网友威言威语博客上看到一个有趣的功能:评论者等级,根据评论者已发布的评论数量,划分不同的等级,并在昵称右边标记一个带等级数字的符号。

评论者等级功能,一方面可以给经常评论的博友一个身份标识,另一方面也能推动浏览者愿意参与互动,提升网站的用户粘度。

这么有趣的功能,我当然心痒痒了,马上动手给小站也添加上。

1、将以下核心代码添加到主题的 functions.php 文件中。

//评论者等级
function get_comment_author_level($user_id, $comment_author_email) {
if ($user_id && user_can($user_id, 'manage_options')) {
return '<span class="post-author">博主</span>';
}
$email = sanitize_email($comment_author_email);
if (empty($email)) return '';
$comment_count = get_cached_comment_count($email);
$levels = [
499 => ['level' => 12, 'name' => '神话'],
369 => ['level' => 11, 'name' => '传奇'],
269 => ['level' => 10, 'name' => '无双'],
189 => ['level' => 9,  'name' => '泰斗'],
129 => ['level' => 8,  'name' => '宗师'],
89  => ['level' => 7,  'name' => '大侠'],
59  => ['level' => 6,  'name' => '豪侠'],
39  => ['level' => 5,  'name' => '侠客'],
24  => ['level' => 4,  'name' => '游侠'],
13  => ['level' => 3,  'name' => '少侠'],
6   => ['level' => 2,  'name' => '新锐'],
2   => ['level' => 1,  'name' => '新秀'],
];
foreach ($levels as $threshold => $info) {
if ($comment_count >= $threshold) {
return sprintf(
'<span class="com-level vip%d" title="%s"><strong>V</strong><sub>%d</sub></span>',
$info['level'],
esc_attr($info['name']),
$info['level']
);
}
}
return '';
}
// 获取评论数(分组缓存)
function get_cached_comment_count($email) {
global $wpdb;
$email = sanitize_email($email);
if (empty($email)) return 0;
// 根据首字母分组(a-z 0-9),其余归 other
$first = strtolower($email[0]);
$group = ctype_alnum($first) ? $first : 'other';
$cache_key = 'comment_counts_group_' . $group;
// 获取该组缓存
$comment_counts = get_transient($cache_key);
if (!is_array($comment_counts)) $comment_counts = [];
if (!isset($comment_counts[$email])) {
// 数据库查询
$count = (int) $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(comment_ID)
FROM $wpdb->comments
WHERE comment_approved = 1
AND comment_author_email = %s
AND (comment_type = '' OR comment_type = 'comment')",
$email
)
);
$comment_counts[$email] = $count;
set_transient($cache_key, $comment_counts, 2 * HOUR_IN_SECONDS);
}
return $comment_counts[$email];
}
// 清理某邮箱的缓存
function clear_comment_count_cache($comment_id) {
$comment = get_comment($comment_id);
if (!$comment || empty($comment->comment_author_email)) return;
$email = sanitize_email($comment->comment_author_email);
if (empty($email)) return;
$first = strtolower($email[0]);
$group = ctype_alnum($first) ? $first : 'other';
$cache_key = 'comment_counts_group_' . $group;
$comment_counts = get_transient($cache_key);
if ($comment_counts !== false && isset($comment_counts[$email])) {
unset($comment_counts[$email]); // 移除该邮箱缓存
set_transient($cache_key, $comment_counts, 2 * HOUR_IN_SECONDS);
}
// 顺带清理最新评论和归档页评论数统计的缓存
delete_transient('sidebar_recent_comments');
delete_transient('archives_comment_stats');
}
// 评论新增/编辑/删除/状态变更时清理缓存
add_action('comment_post', function($comment_id, $comment_approved) {
if ($comment_approved == 1) {
clear_comment_count_cache($comment_id);
}
}, 10, 2);
add_action('wp_set_comment_status', function($comment_id, $status) {
clear_comment_count_cache($comment_id);
}, 10, 2);
add_action('edit_comment', function($comment_id) {
clear_comment_count_cache($comment_id);
}, 10, 1);
add_action('delete_comment', function($comment_id) {
clear_comment_count_cache($comment_id);
}, 10, 1);

2、在主题 - 自定义 - 额外 CSS 中添加样式与配色,里面包含了等级标识和数字标记。

/* 评论者等级 */
.post-author{margin:0 5px 0 4px;cursor:default;color:#ffffff;background-color:#000000;}/* 博主 */
.com-level{margin:0 5px 0 4px;cursor:default;}
.com-level sub{margin-left:-1px;font-weight:bold;vertical-align:-1px;font-size:10px;font-family:sans-serif,Helvetica,Arial;}
.vip1{color:#c0c0c0;} /* 微光灰 */
.vip2{color:#a0a0a0;} /* 哑光灰 */
.vip3{color:#9e7a5d;} /* 古朴青铜 */
.vip4{color:#b87333;} /* 经典青铜 */
.vip5{color:#cb6d1e;} /* 赤铜 */
.vip6{color:#cc8400;} /* 暗金 */
.vip7{color:#d4af37;} /* 古典金 */
.vip8{color:#ffb800;} /* 亮金 */
.vip9{color:#ffa500;} /* 华贵金 */
.vip10{color:#ff8c00;} /* 流光金 */
.vip11{color:#da70d6;} /* 紫金 */
.vip12{color:#a42be2;} /* 至尊紫金 */

3、在 comments.php 或自定义的评论函数中,比如在评论者的昵称旁边添加调用代码、

<?php echo get_comment_author_level($comment->user_id, $comment->comment_author_email); ?>

作者给评论者等级设计了一个 江湖风格的升级体系:新秀 → 新锐 → 少侠 → 游侠 → 侠客 → 豪侠 → 大侠 → 宗师 → 泰斗 → 无双 → 传奇 → 神话,依照 资历 → 实力 → 声望,逐级递进。每个称呼都经过精心斟酌,体现了江湖气息的升级体验。这样评论者的昵称后面就会带上等级标识,整个评论区会更有“江湖气息”。

修改代码时,发现我使用的 Autumn-Pro 主题原本是有评论等级功能的,但作者在更新升级后废止了,他设定了 初来乍到 → 江湖少侠 → 崭露头角 → 自成一派 → 横扫千军 → 登峰造极 → 一统江湖 共7个等级,竟然也是江湖侠客的称呼。

威言威语网友还发布了一个 走心评论 Touching Comments 插件,看着也挺不错,有空时我再折腾下,让网站多些乐趣。


历史上的今天:

相关推荐

如何实现 WordPress 网站页面内容的分页显示?

我的 WordPress 网站中有个“阅读记录”页面,按年份记录了自己一年中阅读过的图书目录。五年下来,文章的内容比较多,页面拉得很长,浏览起来不太方便。所以我想让页面内容按年份分页显示,一年一个分页,通过导航条切换,方便地浏览。 WordPress 编辑器中有“分页符”按钮,在需要分页的地方点击此按钮,就会加入 < ...

WordPress 网站如何实现飘窗广告功能?

飘窗广告是网站广告的常见类型,这一技术现在通常会通过图片+链接的形式,用于展示专题信息或焦点内容。 今天接到网警蜀黍的微信,希望在网站上挂个打谣反诈的飘窗,帮助他们搞一下宣传。这么正能量的请求,当然义不容辞,我立马开始行动。 他们给我的文件包中,有一个 html 主文件,两张展示图片,一个 CSS 文件和一个 ...

如何禁用 WordPress 在线安装、升级和编辑功能

之前因为访问时经常会跳转至无关网站,我把网站的 WordPress 程序在线安装、升级和编辑功能给禁用了。但考虑到安全问题,我今天解除此禁用,把网站程序更新升级到 WordPress 6.8.2 最新版本。 要禁用 WordPress 的在线安装、升级和编辑功能,可通过修改 wp-config.php 文件来实现。 1、禁止安装、升级、编辑主题和插件 ...

阿里云域名优惠口令及使用方法

昨天收到阿里云邮件,提醒我有个域名 mashi.net.cn 距离到期日仅剩30天,让我赶紧续费。 这个域名我还要继续使用,所以选择“立即续费”,cn 域名,阿里云的续费费用是42元/年,到结算界面想起可以使用优惠口令,看看有否优惠政策。 在微信中打开“阿里云万网”服务号,输入“优惠口令”或“口令”,提示查看优惠口令地 ...

1 条评论

  1. acevsV6

    我来看看升级了没。哈哈

回复 acevs 取消回复

您的电子邮件地址不会被公开,必填项已用*标注。