
打開 WordPress 網站的原始碼(瀏覽器按 Ctrl+U),常常可以看到這樣的內容:
<meta name="generator" content="WordPress 6.x.x" />
<link rel="stylesheet" href="https://example.com/wp-includes/css/dist/block-library/style.min.css?ver=6.x.x" />WordPress 的版本號會出現在三個地方:
<head>裡的generator標籤- RSS 訂閱內容裡的
generator - CSS、JS 檔案網址後面的
?ver=
這篇整理怎麼把它們拿掉(原本另一篇〈禁用 WordPress 資源的版本查詢〉的內容,已經整合到這裡),但先說清楚這件事的效果。
隱藏版本號有多大用處?
這篇的舊版說隱藏版本號可以「大幅提昇安全性」,這需要修正:
- 大部分攻擊是機器人自動亂試,不會先看你的版本號再決定要不要攻擊,有沒有隱藏都照試。
- 版本號也能從其他線索推測出來,隱藏只是讓人比較難一眼看出。
- 真正有效的是保持更新。版本號藏得再好,舊版本的漏洞還是在。
所以隱藏版本號可以做,當作基本的整理;但如果是因為「佈景主題或外掛不相容、不能馬上更新」才想藏版本號,更該做的是盡快排除相容性問題、完成更新。更新的設定方式可以參考WordPress 自動更新怎麼設定?。
程式碼要放在哪裡?
下面的程式碼加在子主題的 functions.php,或用 Code Snippets 外掛新增。不要直接改佈景主題本身的 header.php 或 functions.php,主題一更新就會被覆蓋。
移除 generator(head 與 RSS)
// 移除 <head> 裡的 WordPress 版本號
remove_action( 'wp_head', 'wp_generator' );
// 讓其他輸出版本號的地方(包含 RSS)也變成空白
add_filter( 'the_generator', '__return_empty_string' );- 第一行把
<head>裡的generator標籤拿掉。 - 第二行讓 WordPress 所有輸出
generator的地方都變成空白,RSS 也包含在內。
舊版文章說只寫第一行「不 OK」,原因是它只處理 <head>,RSS 裡還看得到版本號。只寫第二行其實就能涵蓋兩者,兩行一起寫最保險。舊版用自己寫的函式回傳空字串,效果跟 WordPress 內建的 __return_empty_string 一樣,直接用內建的就好。
有些外掛或頁面編輯器,也會在 <head> 加上自己的 generator 標籤(寫著外掛名稱與版本)。那是外掛自己輸出的,要看該外掛有沒有提供關閉的設定。
CSS、JS 網址後面的 ?ver= 是什麼?
?ver= 是給瀏覽器快取用的。外掛或佈景主題更新後,版本號跟著改變、網址也就不同,訪客的瀏覽器才會下載新的檔案,而不是繼續用快取裡的舊檔案。
問題在於:WordPress 核心的檔案,以及沒有指定版本號的外掛檔案,會用 WordPress 的版本號當作 ver,從這裡就能看出你的 WordPress 版本。
推薦寫法:只移除「等於 WordPress 版本」的 ver
/**
* CSS、JS 網址的 ver 如果剛好等於 WordPress 版本,就把它拿掉
* 外掛、佈景主題自己的版本號保留,更新後瀏覽器才會抓新檔案
*/
function ahwei_hide_wp_version_in_assets( $src ) {
if ( ! $src ) {
return $src;
}
$query = (string) wp_parse_url( $src, PHP_URL_QUERY );
parse_str( $query, $args );
if ( isset( $args['ver'] ) && get_bloginfo( 'version' ) === $args['ver'] ) {
$src = remove_query_arg( 'ver', $src );
}
return $src;
}
add_filter( 'style_loader_src', 'ahwei_hide_wp_version_in_assets', 9999 );
add_filter( 'script_loader_src', 'ahwei_hide_wp_version_in_assets', 9999 );加上之後:
- WordPress 核心檔案的網址不再顯示版本號。
- 外掛、佈景主題自己的版本號照樣保留,它們更新後,訪客的瀏覽器會正常下載新檔案。
- 網址裡的其他參數完全不受影響。
小提醒:WordPress 本身更新之後,核心 CSS、JS 的網址不會改變,訪客的瀏覽器可能暫時沿用快取裡的舊檔案。一般影響不大;有使用快取外掛或 CDN 的話,更新後清一次快取即可。
舊寫法:把所有 ?ver= 參數全部砍掉(不建議)
原本另一篇文章的寫法,是把每個 CSS、JS 網址從 ? 切開、只留前半段。這個做法現在不建議使用:
- 會砍掉所有參數,不只是 ver:例如佈景主題載入 Google Fonts 的網址
https://fonts.googleapis.com/css2?family=Noto+Sans+TC&display=swap,?後面才是真正的字型設定,被砍掉之後字型就載入失敗了。 - 更新後訪客可能看到舊樣式:外掛更新了,檔案網址卻沒變,訪客的瀏覽器可能繼續用舊的 CSS、JS,出現版面跑掉或功能異常。
- 對速度幾乎沒有幫助:「移除網址參數」是早期測速工具的建議,當時認為帶參數的網址不容易被快取。現在的瀏覽器、快取外掛與 CDN 大多能正常快取這類網址。
如果你還是想拿掉所有檔案的版本號,至少把切開網址的寫法換成 remove_query_arg( 'ver', $src ),只移除 ver,不要動到其他參數。
設定完怎麼確認?
- 有裝快取外掛的話,先清除快取。
- 用無痕視窗打開網站首頁,按 Ctrl+U 查看原始碼。
- 按 Ctrl+F 搜尋
generator和ver=,確認 WordPress 的版本號已經不見。 - RSS 可以打開
你的網址/feed/,同樣搜尋generator。
延伸閱讀
- WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧
- WordPress 登入安全怎麼做?兩步驟驗證、限制登入次數與修改登入網址
- WordPress 網站加速完整攻略:測速、主機、快取、圖片、外掛與資料庫清理
版本號藏起來只是小事,網站有沒有持續更新、定期備份才是關鍵。正威網路行銷是 25 年經驗的基隆網頁設計工作室,除了客製化網頁設計,也提供網站維護託管,歡迎來聊聊。







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