WordPress 评论解锁插件开发教程
【摘要】 本文详细解析了一个 WordPress 评论解锁插件的实现过程,重点讲解了短代码、Cookie 判断、数据库验证等核心函数的作用与改进方法,帮助开发者理解如何实现“评论解锁内容”的功能。转载链接:https://woolyun.com/wordpress-reply-display/
本文转自【天海博客】
🧩 前言:让内容像宝盒一样,等待读者开启
一个优秀的网站不仅要有高质量的内容,还要有巧妙的互动机制。比如一些干货内容,只向用心评论者开放。
现在,我们就一起来探讨一个实现“评论后解锁可见内容”的WordPress 插件。
🔍 一、WordPress评论解锁插件结构一览
该插件的核心功能包括:
- 短代码封装隐藏内容
- 评论后设置 Cookie
- 判断是否已评论以决定是否显示内容
- 加载自定义样式
完整代码如下:
核心文件:reply-display/reply-display.php
PHP
<?php
/*
Plugin Name: reply-display
Plugin URI: https://www.woolyun.com
Description: 让文章中的部分内容只有评论后才可见
Version: 1.1
Author: ctihai
*/
date_default_timezone_set('Asia/Shanghai');
// 当评论插入时设置特定文章ID的Cookie
add_action('wp_insert_comment', 'set_comment_postid', 10, 2);
function set_comment_postid($comment_id, $comment) {
if ($comment->comment_approved == 1) { // 仅当评论已审核时设置
$post_id = $comment->comment_post_ID;
setcookie("reply_$post_id", "1", time() + 3600 * 24 * 30, "/");
}
}
// 添加短代码 [replydis]...[/replydis]
add_shortcode('replydis', 'reply_read_shortcode');
function reply_read_shortcode($atts, $content = null) {
$post_id = get_the_ID();
// 如果用户已经评论过本文,返回内容
if (has_replied($post_id)) {
return do_shortcode($content);
}
// 默认返回提示语句
$atts = shortcode_atts([
'notice' => '<div class="replydis"><p>温馨提示:此处内容需要<a href="#respond" title="评论本文">评论本文</a>后才能查看。</p></div>'
], $atts);
return $atts['notice'];
}
// 判断用户是否评论过本文
function has_replied($post_id) {
global $wpdb;
//检查 Cookie
$cookie_name = "reply_$post_id";
return isset($_COOKIE[$cookie_name]) && $_COOKIE[$cookie_name] === '1';
}
// 加载CSS样式
function reply_read_enqueue_style() {
wp_enqueue_style('reply-to-style', plugins_url('css/replydis.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'reply_read_enqueue_style');
css文件:reply-display/css/replydis.css
PHP
.replydis{
background: #CCCCCC;
color: #000000;
font-family: "Microsoft YaHei","微软雅黑","幼圆","宋体","楷体","楷体_GB2312";
font-size: 16px;
font-weight:bold;
font-style: normal;
margin:0;
padding: 10px 20px;
line-height: normal;
}
这些功能由几个关键函数组成,下面我们逐个解析它们的用途和意义。
🔨 二、函数详解:每个函数背后的意义与作用
1. set_comment_postid()
当用户提交评论时,这个函数被触发,并设置一个带文章 ID 的 Cookie,例如:reply_123=1
,其中 123
是文章的 ID。
📌 作用:
- 标记用户已对某篇文章发表过评论
- 设置有效期为 30 天,避免频繁重复评论即可查看
- 避免全局 Cookie,提高精确度
2. reply_read_shortcode()
这是短代码 [replydis]...[/replydis]
的处理函数。它决定了内容是否展示给用户。
📌 作用:
- 使用短代码包裹隐藏内容(如一段代码或资源)
- 检查当前用户是否已评论本文
- 若未评论,则返回提示信息:“请先评论本文”
- 若已评论,则返回被隐藏内容
📌 特点:
- 支持自定义提示语句
- 判断逻辑更清晰,避免误判
3. has_replied()
该函数负责最终判断用户是否真正“评论过”当前文章。
📌 作用:
- 检查 Cookie 是否存在对应标识
- 更加严谨地防止伪造访问
📌 妙处:
- 防止手动设置 Cookie 即可绕过限制
- 提升插件的安全性和准确性
4. reply_read_enqueue_style()
用于加载 CSS 文件,使插件样式美观统一。
📌 作用:
- 加载插件所需的样式表
replydis.css
- 保持前端界面一致性
- 可通过 CSS 自定义提示框样式
🎯 三、插件亮点总结:从粗糙到精致的进化之路
功能 | 描述 |
---|---|
精确识别文章ID | 用户评论哪篇,解锁哪篇 |
游客友好体验 | 用 Cookie 实现便捷解锁 |
样式可定制 | 支持 CSS 调整外观 |
我们不要简单地复制粘贴,而是要深思熟虑地重构每一步逻辑。
📚 结语
“知之愈明,则行之愈笃。”
通过这篇文章,你已经了解了如何构建一个“评论可见”插件的核心逻辑。
请记住:好的插件,始于一行代码,终于用户的体验。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)