需求情境是客戶的網站啟用了多站網路架構,而子站的部分僅作為資料展示用,在維護上客戶希望透過主站就能自動更新子站的內容,因此連同文章的圖片直接使用主站的即可。
在開啟多站網路後,媒體庫的 uploads 資料夾就會多增加一個 sites
的目錄,藉此來存放各子站的圖片,如果是透過複製主站的方式來建立子站,媒體庫的容量就會以倍數增長。
解決方案是請客戶購買 NS Cloner Pro 版,它可以在建立子站時選擇是否要複製媒體庫,如果取消勾選的話就不會再多複製一份出來,然後再使用 WordPress 的勾點 upload_dir
去修改子站的圖片路徑,讓路徑可以對應到主站的媒體庫資料夾。
這樣做的優點是萬一哪天子站要移動到另外一個多站網路底下,只要把修改路徑的勾點移除就好,不會動到資料庫所以不需要複製取代,但缺點是在子站的後台無法正常上傳圖片,如果需要在子站後台上傳圖片,要再另外進行實作了。
替換子站圖片路徑程式碼如下:
/**
* 替換子站圖片路徑
*/
add_filter(
'upload_dir',
function( $data ) {
// 不是主站才進行替換
if ( 1 !== get_current_blog_id() ) {
foreach ( $data as $key => $value ) {
$data[ $key ] = str_replace( '/sites/' . get_current_blog_id(), '', $data[ $key ] );
}
return $data;
}
return $data;
},
999
);