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