
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)至新文章:接收別人的網站送來的通知。
按「儲存設定」。要注意,「允許接收通知」這個設定只影響之後新增的文章,已經發佈的文章還是會繼續接收,要用下面的方法二處理。
方法二:舊文章用大量編輯關閉
- 到「文章 → 所有文章」,文章多的話先到右上角的顯示選項,把每頁顯示的數量調高。
- 全選文章,「批次動作」選「編輯」,按「套用」。
- 在大量編輯區塊裡,把「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 ] );
}
}
} );它會把連到自己網域的連結從通知清單裡拿掉,其他網站照常通知。
延伸閱讀
- WordPress 關閉留言功能:全站關閉、只關頁面、舊文章自動關閉的做法
- WordPress 防垃圾留言總整理:外掛、留言設定、蜜罐與字數限制
- WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧
把用不到的舊功能關掉,是網站維護裡最省力、也最常被忽略的一步。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供網站維護託管,歡迎來聊聊。







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