WordPress 博客從 2.7 版本就自帶了“ 嵌套回覆” 功能,但是很多主題都沒有添加該效果,大部分博主也用博客插件來實現該功能,可博客插件的嵌套回覆的內容樣式與父評論不能保持一致,而使用自帶的嵌套功能卻可以和父評論的內容樣式一樣。博客吧轉載了零號相冊的 WordPress 博客自帶嵌套回覆教程。

自帶嵌套功能工作原理:

WordPress 嵌套回覆的工作原理是 WP 的數據庫裏有個 wp_comments 的表中有一欄 comment_parent ,即可以對 comment 指定父級,達到嵌套的目的。

非插件嵌套回覆教程:

1. 在博客後台的已安裝插件列表中停用 WordPress Thread Comment 插件。並在博客後台點擊“ 設置” 選項卡中的“ 討論” 選項進入配置頁面,開啓“ 允許嵌套 X 層評論” 。

2. 登陸博客後台,點擊“ 外觀” 選項卡下的“ 編輯” 選項進入主題編輯頁面,選擇主題 (這裏以 WP 自帶 classic 主題為例),編輯頭部文件 header.php,在 WP 函數

<?php wp_head(); ?>

之前添上代碼

<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>

該代碼在文章/頁面調用嵌套回覆的 Javascript 文件

3. 打開主題的 comments.php 評論模板。原有的模板代碼大概是如下:

<?php if ( $comments ) : ?>
<ol id="commentlist">
<?php foreach ($comments as $comment) : ?>
<li>
...
<?php comment_text() ?>
...
</li>
<?php endforeach; ?>
</ol>
<?php else : // If there are no comments yet ?>
<p><?php _e('No comments yet.'); ?></p>
<?php endif; ?>

如今有了 WP 自帶的 wp_list_comments(); 函數,即可輕鬆完成這些工作,把上面代碼替換為:

<?php if ( $comments ) : ?>
<ol class="commentlist">
<?php wp_list_comments();?>
</ol>
<?php else : // If there are no comments yet ?>
<p><?php _e('No comments yet.'); ?></p>
<?php endif; ?>

説明一下,原有的判斷有留言、取出、並顯示的部分用一個 wp_list_comments(); 即可取代。原來的 ol(有序列表) 的 id="commentlist" 改為 class="commentlist",這是因為到後面定義 CSS 的時候可能會與其他產生衝突。

4. 在評論模板 comments.php 中找到一個 textarea,name=”comment”,就是訪客輸入留言的文本域,看看這個 textarea 中是否有個 id=”comment”,如果有,把 id=”comment” 去掉 (不是去掉 textarea,而是去掉定義的 ID) 。

5. 在評論模板 comments.php 中找到代碼:

<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />

將代碼替換為:

<?php comment_id_fields(); ?>

這是對回覆框進行定義,以便支持嵌套回覆。

6. 在評論模板 comments.php 中找到代碼:

<h2 id="postcomment"><?php _e('Leave a comment'); ?></h2>

<?php endif; // If registration required and not logged in ?>

的外部用一個 id 為”respond” 的 div 包裹

<div id="respond">
……
</div>

這樣是為了在嵌套回覆時,點擊留言者旁邊的“ 回覆”,即可把評論框整體移至該評論附近。

7. 在評論模板 comments.php 中的“Leave a Reply” 下面增加代碼:

<div id="cancel-comment-reply">
<small><?php cancel_comment_reply_link() ?></small>
</div>

這是一個取消評論的鏈接。一般情況下,該鏈接不顯示,只有要針對某人進行評論,而不想評論時可以點擊這個鏈接把評論框復位。