
用 WordPress 做公司形象網站,「關於我們」「聯絡我們」下面卻出現一個留言框,看起來很奇怪;開著又只會收到垃圾留言。
先講最容易搞錯的一點:後台「討論」設定只會影響「之後新增」的文章,已經發佈的文章、頁面會保留原本的設定,要另外處理。下面從不用寫程式的方法開始,依需求選一種就好。
方法一:後台設定,新文章預設不開放留言
到後台「設定 → 討論」,在「預設文章設定」區塊,取消勾選允許其他人在新文章發佈留言的選項,按「儲存設定」。之後新增的文章、頁面就不會有留言區。
同一頁還有一個「自動關閉發佈超過幾天的文章留言」的選項。如果你是經營部落格,想讓新文章保有留言、舊文章不要再被垃圾留言騷擾,勾選這個並設定 30~90 天就很適合,不需要整個關掉。
方法二:已經發佈的文章,用「大量編輯」一次關閉
- 到「文章 → 所有文章」(頁面就到「頁面 → 所有頁面」)。
- 文章很多的話,先到右上角的顯示選項,把每頁顯示的項目數量調高,才能一次選到全部。
- 勾選最上面的核取方塊全選,「批次動作」選「編輯」,按「套用」。
- 在出現的大量編輯區塊裡,「留言」選「不允許」,「Ping」也可以一起選「不允許」,按「更新」。
單獨一篇文章,也可以在文章編輯畫面右側的設定欄裡,找到「討論」或留言相關的選項關閉。
方法三:程式碼全站關閉留言
如果網站完全不需要留言功能,用程式碼關閉最徹底:不管新舊文章、不管用哪個主題都一律關閉,也會擋掉直接對留言程式送資料的機器人(WordPress 收到留言時會先檢查這篇文章有沒有開放留言)。
程式碼加到子主題的 functions.php,或用 Code Snippets 外掛新增:
// 1) 所有文章、頁面都不開放留言與 Pingback
add_filter( 'comments_open', '__return_false', 20 );
add_filter( 'pings_open', '__return_false', 20 );
// 2) 已經存在的留言也不要顯示(傳統主題有效)
add_filter( 'comments_array', '__return_empty_array', 20 );
// 3) 移除文章、頁面編輯畫面裡的留言功能
add_action( 'init', function () {
foreach ( get_post_types() as $post_type ) {
if ( post_type_supports( $post_type, 'comments' ) ) {
remove_post_type_support( $post_type, 'comments' );
remove_post_type_support( $post_type, 'trackbacks' );
}
}
}, 100 );
// 4) 移除後台左側的「留言」選單
add_action( 'admin_menu', function () {
remove_menu_page( 'edit-comments.php' );
} );
// 5) 移除上方工具列的留言圖示
add_action( 'admin_bar_menu', function ( $wp_admin_bar ) {
$wp_admin_bar->remove_node( 'comments' );
}, 999 );說明:
comments_open、pings_open是 WordPress 判斷「這篇文章能不能留言、能不能收 Pingback」的過濾器,回傳false就是一律不開放。- 第 4 段只是把選單藏起來,舊留言還在資料庫裡。如果想清掉舊留言,建議先到「留言」頁面處理完,再加這段程式碼。
- 區塊主題(例如 Twenty Twenty-Four)的留言區塊,不一定會經過
comments_array這個過濾器,舊留言可能還是會顯示。這時到「外觀 → 編輯器 → 範本」,打開「單篇文章」和「頁面」範本,把「留言」區塊刪掉即可。
方法四:只關閉頁面的留言,文章照常開放
部落格文章想保留留言,只有「關於我們」這類頁面不需要,可以改用這段:
function ahwei_close_comments_by_type( $open, $post_id ) {
// 要關閉留言的類型:page 是頁面,attachment 是媒體附件頁
$closed_types = array( 'page', 'attachment' );
if ( in_array( get_post_type( $post_id ), $closed_types, true ) ) {
return false;
}
return $open;
}
add_filter( 'comments_open', 'ahwei_close_comments_by_type', 20, 2 );
add_filter( 'pings_open', 'ahwei_close_comments_by_type', 20, 2 );媒體附件頁(每張圖片自己的頁面)很少有人會去留言,卻常被垃圾留言鎖定,建議一起關閉。有商品、作品集等自訂文章類型的話,把它們的名稱加進 $closed_types 就好。
舊版做法為什麼不建議
這篇文章舊版教了兩種做法,現在都有更好的選擇:
- 用
the_posts過濾器修改留言狀態:它只改到當下查詢出來的第一篇文章,遇到一頁裡有好幾個查詢的情況容易出錯;而且只影響顯示,機器人直接送出的留言還是收得進來。用comments_open才是 WordPress 正式提供的方式。 - 刪掉
page.php、single.php裡的comments_template():傳統主題可以這樣做,但直接改主題檔案,主題一更新就會被蓋回去,要改也要改在子主題裡。而且這只是「不顯示」留言區,留言功能其實還開著。區塊主題則根本沒有這些檔案。
關閉之後的檢查
- 用無痕視窗打開幾篇文章與頁面,確認沒有留言框。
- 有些主題還是會顯示「留言已關閉」之類的文字,可以到主題的自訂選項,或網站編輯器的範本裡把它拿掉。
延伸閱讀
- WordPress 防垃圾留言總整理:外掛、留言設定、蜜罐與字數限制
- WordPress 關閉 Pingback 與 Trackback:擋掉垃圾通知與自我 Ping
- WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧
形象網站用不到留言,就乾脆關掉,後台清爽,也少一個被垃圾訊息鎖定的入口。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與網站維護託管,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。