0%

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

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

WordPress 更改上傳路徑:後台欄位不見了怎麼辦?UPLOADS 常數寫法與風險

筆電與程式碼符號圖示

WordPress 上傳的圖片與檔案,預設都存在 wp-content/uploads/年/月/ 資料夾裡。很久以前,「設定 → 媒體」有兩個欄位可以修改上傳的資料夾與網址,但這兩個欄位已經從後台移除,只有以前曾經設定過的網站才會看到。

這篇舊版教的是進入隱藏的 /wp-admin/options.php 頁面,修改 upload_path 與 upload_url_path。這個頁面列出網站所有的底層設定,改錯一個值就可能讓網站無法運作,不建議再使用。下面整理現在比較穩當的做法,以及改路徑之前一定要知道的風險。

先想清楚:真的需要改嗎?

更改上傳路徑最大的麻煩是已經上傳的圖片(下面會詳細說明)。很多想改路徑的理由,其實有更簡單的解法:

  • 想把圖片放到子網域來加速:以前的網站會把圖片放在另一個網域,讓瀏覽器同時下載更多檔案。現在的網站普遍使用 HTTP/2,一個連線就能同時傳很多檔案,這招已經沒有幫助。想用 CDN 加速,大多是由 CDN 服務或外掛自動改寫圖片網址,不需要搬動檔案。
  • 想讓圖片網址短一點:對 SEO 幾乎沒有影響,圖片的檔名與替代文字(alt)比資料夾路徑重要。
  • 想整理圖片:可以用媒體庫分類,比改資料夾更有彈性。

如果還是需要改(例如新網站要沿用舊系統的圖片路徑),再往下看。

方法一:在 wp-config.php 定義 UPLOADS(最簡單)

用 FTP 或主機的檔案管理員,打開網站根目錄的 wp-config.php,在「That's all, stop editing!」那一行的上面加入:

PHP
define( 'UPLOADS', 'media' );
  • 路徑是相對於 WordPress 的安裝資料夾,前後都不要加斜線。
  • 以上面的例子來說,之後上傳的檔案會存到網站根目錄的 media/年/月/,網址變成 https://你的網址/media/年/月/檔名.jpg。
  • 資料夾不存在時,WordPress 會自動建立,前提是主機的權限允許寫入。
  • WordPress 如果是裝在子資料夾(例如網址是 example.com/wp/),新資料夾也會在那個子資料夾底下。

方法二:用 upload_dir 篩選器(放到其他資料夾或網址)

UPLOADS 只能指定 WordPress 安裝資料夾底下的位置。要放到其他地方,例如已經設定好的子網域資料夾,要用 upload_dir 篩選器。

這段程式碼建議做成 must-use 外掛:在 wp-content 裡建立 mu-plugins 資料夾(沒有就新增),放入一個 custom-upload-dir.php 檔案。放在這裡的程式會自動執行、不能從後台停用,換主題也不會失效:

PHP
<?php
/**
 * Plugin Name: 自訂上傳路徑
 */
add_filter( 'upload_dir', function ( $uploads ) {
    $uploads['basedir'] = '/home/帳號/public_html/img'; // 主機上的完整路徑
    $uploads['baseurl'] = 'https://img.example.com';     // 這個資料夾對應的網址
    $uploads['path']    = $uploads['basedir'] . $uploads['subdir'];
    $uploads['url']     = $uploads['baseurl'] . $uploads['subdir'];
    return $uploads;
} );
  • basedir 要填主機上的完整路徑。不確定的話,可以到「工具 → 網站健康狀態 → 資訊」,在目錄相關的區塊參考目前 WordPress 與上傳資料夾的實際位置。
  • baseurl 的網址必須真的能打開這個資料夾,子網域要先在主機設定好,並且裝好 SSL 憑證。
  • 這種寫死完整路徑的做法,網站搬家或換主機時路徑會改變,要記得一起修改。

最大的風險:舊圖片會破圖

這是改上傳路徑最容易忽略的地方。WordPress 在資料庫記錄每張圖片時,存的是相對路徑(例如 2024/05/photo.jpg),顯示時再接上「目前設定的」上傳網址。所以改了路徑之後:

  • 媒體庫、特色圖片:會用新的路徑去找舊圖片,檔案沒搬過去就會破圖。
  • 文章內文裡的圖片:網址是寫死在內文裡的舊路徑,檔案還在就不會壞,但舊資料夾就不能刪。

所以已經有圖片的網站,改路徑要照這個順序:

  1. 完整備份資料庫與網站檔案。
  2. 設定新的路徑(方法一或方法二)。
  3. 把 wp-content/uploads 裡的所有檔案複製到新資料夾,保留原本的年/月資料夾結構。
  4. 用 Better Search Replace 之類的外掛,把資料庫裡的舊網址(例如 https://example.com/wp-content/uploads/)取代成新網址。先用試執行(dry run)確認會改到哪些資料,再正式執行。
  5. 檢查媒體庫、特色圖片、文章圖片,以及用頁面編輯器做的頁面,並清除快取外掛與 CDN 的快取。
  6. 確認都正常之後,在網站根目錄的 .htaccess 加上轉址,讓外部網站與 Google 圖片搜尋的舊網址也能找到新位置,最後才刪除舊資料夾:
Apache (.htaccess)
RedirectMatch 301 ^/wp-content/uploads/(.*)$ /media/$1

把 /media/ 換成你的新路徑,這行要放在 # BEGIN WordPress 的上面。

其他要注意的地方

  • 外掛相容性:備份、圖片壓縮、安全性、CDN 這類外掛,有些會假設圖片放在 wp-content/uploads,改完之後要檢查它們的設定與運作。
  • 新資料夾一樣要防護:上傳資料夾不應該能執行 PHP,做法請看WordPress 限制上傳檔案類型裡的說明。
  • 多站台(Multisite)網站的上傳路徑規則不同,不適用這篇的做法。

如果以前用 options.php 改過

以前照舊方法改過 upload_path 或 upload_url_path 的網站,「設定 → 媒體」會重新出現這兩個欄位。想改回預設,把兩個欄位都清空後儲存;但這樣一樣會遇到上面說的舊圖片問題,要先把檔案搬回 wp-content/uploads,並替換資料庫裡的網址。

只是不想要「年/月」資料夾?

到「設定 → 媒體」,取消勾選依年份與月份分類上傳檔案的選項即可,只會影響之後上傳的檔案。不過所有檔案都放在同一個資料夾,檔案一多,用 FTP 瀏覽會變得很慢,大部分網站維持預設就好。

延伸閱讀

搬家、改路徑這類動到整站圖片的工作,一個步驟沒做好就會到處破圖。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供網站維護託管,服務台北與全台客戶,歡迎來聊聊。

分享這篇文章

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

發表留言

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

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