Stories

Detail Return Return

WordPress 評論解鎖插件開發教程 - Stories Detail

轉載地址: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 調整外觀

我們不要簡單地複製粘貼,而是要深思熟慮地重構每一步邏輯。

    • *

📚 結語

“知之愈明,則行之愈篤。”

通過這篇文章,你已經瞭解瞭如何構建一個“評論可見”插件的核心邏輯。

請記住:好的插件,始於一行代碼,終於用户的體驗。

user avatar u_13778063 Avatar godjian Avatar bugDiDiDi Avatar weishiledanhe Avatar huangSir-devops Avatar damonxiaozhi Avatar robin_ren Avatar segmentfault Avatar zyuxuaner Avatar jamesfancy Avatar muyouhuiyao Avatar weidelanqiu Avatar
Favorites 13 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.