0%

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

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

WordPress 隱藏版本號的正確寫法(含移除 ?ver= 參數)

wordpress上傳圖片格式的秘訣

打開 WordPress 網站的原始碼(瀏覽器按 Ctrl+U),常常可以看到這樣的內容:

HTML
<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 的版本號會出現在三個地方:

  1. <head> 裡的 generator 標籤
  2. RSS 訂閱內容裡的 generator
  3. CSS、JS 檔案網址後面的 ?ver=

這篇整理怎麼把它們拿掉(原本另一篇〈禁用 WordPress 資源的版本查詢〉的內容,已經整合到這裡),但先說清楚這件事的效果。

隱藏版本號有多大用處?

這篇的舊版說隱藏版本號可以「大幅提昇安全性」,這需要修正:

  • 大部分攻擊是機器人自動亂試,不會先看你的版本號再決定要不要攻擊,有沒有隱藏都照試。
  • 版本號也能從其他線索推測出來,隱藏只是讓人比較難一眼看出。
  • 真正有效的是保持更新。版本號藏得再好,舊版本的漏洞還是在。

所以隱藏版本號可以做,當作基本的整理;但如果是因為「佈景主題或外掛不相容、不能馬上更新」才想藏版本號,更該做的是盡快排除相容性問題、完成更新。更新的設定方式可以參考WordPress 自動更新怎麼設定?。

程式碼要放在哪裡?

下面的程式碼加在子主題的 functions.php,或用 Code Snippets 外掛新增。不要直接改佈景主題本身的 header.php 或 functions.php,主題一更新就會被覆蓋。

移除 generator(head 與 RSS)

PHP
// 移除 <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

PHP
/**
 * 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,不要動到其他參數。

設定完怎麼確認?

  1. 有裝快取外掛的話,先清除快取。
  2. 用無痕視窗打開網站首頁,按 Ctrl+U 查看原始碼。
  3. 按 Ctrl+F 搜尋 generator 和 ver=,確認 WordPress 的版本號已經不見。
  4. RSS 可以打開 你的網址/feed/,同樣搜尋 generator。

延伸閱讀

版本號藏起來只是小事,網站有沒有持續更新、定期備份才是關鍵。正威網路行銷是 25 年經驗的基隆網頁設計工作室,除了客製化網頁設計,也提供網站維護託管,歡迎來聊聊。

分享這篇文章

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

發表留言

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

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