0%

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

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

WordPress 關閉 Pingback 與 Trackback:擋掉垃圾通知與自我 Ping

關鍵字搜尋與各種行銷圖示

WordPress 的留言區有時會出現一種奇怪的「留言」,內容只有一小段別人網站的文字和連結,甚至是你自己網站另一篇文章的標題。這就是 Pingback 或 Trackback。

Pingback 和 Trackback 是什麼?

舉個例子:A 寫了一篇文章,裡面連到 B 的文章。A 發佈文章時,WordPress 會自動通知 B 的網站「有人引用了你的文章」,B 的文章下面就會多一則引用通知。

  • Pingback:自動的。發文時 WordPress 會找出文章裡的連結,自動去通知對方;對方的網站會回頭檢查你的文章裡是不是真的有這個連結。
  • Trackback:比較早期的做法,由發文的一方主動送出,對方不會驗證,所以更容易被濫用。

這是部落格盛行時代用來互相串連的功能,現在已經很少有人靠它交流。

為什麼建議關閉?

  • 幾乎都是垃圾通知:現在收到的 Pingback、Trackback,大多是垃圾網站為了留下連結而送的。
  • 自我 Ping:你在文章裡連到自己網站的其他文章,WordPress 也會通知自己,被連到的那篇下面就多一則自己網站的引用通知,很多站長以為是有人引用了自己。
  • 曾被拿來攻擊別人:Pingback 是透過網站的 xmlrpc.php 運作,過去曾被大量濫用,讓許多 WordPress 網站一起對某個網站發出請求,形成 DDoS 攻擊。

舊版文章說關閉後可以「加快伺服器」,實際上對速度的影響不大,主要的好處是少掉垃圾通知和不必要的連線,不要期待網站會因此明顯變快。

方法一:後台「討論」設定

到後台「設定 → 討論」,在「預設文章設定」區塊,取消勾選這兩個選項(文字依 WordPress 版本略有不同):

  • 試著通知文章中連結的網誌:發文時去通知別人的網站。
  • 允許其他網誌傳送連結通知(Pingback 與 Trackback)至新文章:接收別人的網站送來的通知。

按「儲存設定」。要注意,「允許接收通知」這個設定只影響之後新增的文章,已經發佈的文章還是會繼續接收,要用下面的方法二處理。

方法二:舊文章用大量編輯關閉

  1. 到「文章 → 所有文章」,文章多的話先到右上角的顯示選項,把每頁顯示的數量調高。
  2. 全選文章,「批次動作」選「編輯」,按「套用」。
  3. 在大量編輯區塊裡,把「Ping」設成「不允許」,按「更新」。

已經收到的引用通知,可以到「留言」頁面,用上方篩選留言類型的下拉選單,只列出 Pingback 這一類,全選後移到垃圾桶。

方法三:程式碼全站關閉

想一次處理乾淨,不用擔心新舊文章的設定不一致,可以加上這段程式碼(放在子主題的 functions.php,或用 Code Snippets 外掛新增):

PHP
// 1) 所有文章、頁面都不接收 Pingback、Trackback
add_filter( 'pings_open', '__return_false', 20 );

// 2) 發文時不要主動通知任何網站(包含自己)
add_action( 'pre_ping', function ( &$links ) {
    $links = array();
} );

// 3) 移除 XML-RPC 裡的 Pingback 功能
add_filter( 'xmlrpc_methods', function ( $methods ) {
    unset( $methods['pingback.ping'], $methods['pingback.extensions.getPingbacks'] );
    return $methods;
} );

說明:

  • pings_open 是 WordPress 判斷「這篇文章能不能接收 Pingback、Trackback」的過濾器,回傳 false 就全部不接收,不管文章本身怎麼設定。
  • pre_ping 會在 WordPress 準備發送通知前執行,把要通知的連結清單清空,就不會送出任何通知。
  • 第 3 段把 xmlrpc.php 裡處理 Pingback 的功能拿掉。要注意,只用 xmlrpc_enabled 過濾器關閉 XML-RPC 的話,關掉的是「需要登入」的功能,Pingback 這種不用登入的功能其實還在,所以要另外處理。
  • 網站完全用不到 XML-RPC 的話,也可以整個關閉,做法與注意事項請看WordPress functions.php 實用程式碼整理。

只想停止「自我 Ping」

如果你還想保留跟其他部落格互相通知的功能,只是不想要自己通知自己,用這段取代上面的第 2 段:

PHP
add_action( 'pre_ping', function ( &$links ) {
    $site_host = wp_parse_url( home_url(), PHP_URL_HOST );
    foreach ( $links as $i => $link ) {
        if ( wp_parse_url( $link, PHP_URL_HOST ) === $site_host ) {
            unset( $links[ $i ] );
        }
    }
} );

它會把連到自己網域的連結從通知清單裡拿掉,其他網站照常通知。

延伸閱讀

把用不到的舊功能關掉,是網站維護裡最省力、也最常被忽略的一步。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供網站維護託管,歡迎來聊聊。

分享這篇文章

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

發表留言

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

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