轉載地址:WordPress 評論解鎖插件開發教程
🧩 前言:讓內容像寶盒一樣,等待讀者開啓
一個優秀的網站不僅要有高質量的內容,還要有巧妙的互動機制。比如一些乾貨內容,只向用心評論者開放。
現在,我們就一起來探討一個實現“評論後解鎖可見內容”的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 調整外觀 |
我們不要簡單地複製粘貼,而是要深思熟慮地重構每一步邏輯。
-
- *
📚 結語
“知之愈明,則行之愈篤。”
通過這篇文章,你已經瞭解瞭如何構建一個“評論可見”插件的核心邏輯。
請記住:好的插件,始於一行代碼,終於用户的體驗。