0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 關閉留言功能:全站關閉、只關頁面、舊文章自動關閉的做法

客製化網頁設計在html 連結 錨點語法 id  慢慢滾動

用 WordPress 做公司形象網站,「關於我們」「聯絡我們」下面卻出現一個留言框,看起來很奇怪;開著又只會收到垃圾留言。

先講最容易搞錯的一點:後台「討論」設定只會影響「之後新增」的文章,已經發佈的文章、頁面會保留原本的設定,要另外處理。下面從不用寫程式的方法開始,依需求選一種就好。

方法一:後台設定,新文章預設不開放留言

到後台「設定 → 討論」,在「預設文章設定」區塊,取消勾選允許其他人在新文章發佈留言的選項,按「儲存設定」。之後新增的文章、頁面就不會有留言區。

同一頁還有一個「自動關閉發佈超過幾天的文章留言」的選項。如果你是經營部落格,想讓新文章保有留言、舊文章不要再被垃圾留言騷擾,勾選這個並設定 30~90 天就很適合,不需要整個關掉。

方法二:已經發佈的文章,用「大量編輯」一次關閉

  1. 到「文章 → 所有文章」(頁面就到「頁面 → 所有頁面」)。
  2. 文章很多的話,先到右上角的顯示選項,把每頁顯示的項目數量調高,才能一次選到全部。
  3. 勾選最上面的核取方塊全選,「批次動作」選「編輯」,按「套用」。
  4. 在出現的大量編輯區塊裡,「留言」選「不允許」,「Ping」也可以一起選「不允許」,按「更新」。

單獨一篇文章,也可以在文章編輯畫面右側的設定欄裡,找到「討論」或留言相關的選項關閉。

方法三:程式碼全站關閉留言

如果網站完全不需要留言功能,用程式碼關閉最徹底:不管新舊文章、不管用哪個主題都一律關閉,也會擋掉直接對留言程式送資料的機器人(WordPress 收到留言時會先檢查這篇文章有沒有開放留言)。

程式碼加到子主題的 functions.php,或用 Code Snippets 外掛新增:

PHP
// 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 這個過濾器,舊留言可能還是會顯示。這時到「外觀 → 編輯器 → 範本」,打開「單篇文章」和「頁面」範本,把「留言」區塊刪掉即可。

方法四:只關閉頁面的留言,文章照常開放

部落格文章想保留留言,只有「關於我們」這類頁面不需要,可以改用這段:

PHP
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():傳統主題可以這樣做,但直接改主題檔案,主題一更新就會被蓋回去,要改也要改在子主題裡。而且這只是「不顯示」留言區,留言功能其實還開著。區塊主題則根本沒有這些檔案。

關閉之後的檢查

  • 用無痕視窗打開幾篇文章與頁面,確認沒有留言框。
  • 有些主題還是會顯示「留言已關閉」之類的文字,可以到主題的自訂選項,或網站編輯器的範本裡把它拿掉。

延伸閱讀

形象網站用不到留言,就乾脆關掉,後台清爽,也少一個被垃圾訊息鎖定的入口。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與網站維護託管,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!