本篇文章更新時間:2021/09/03
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
會有這需求也是剛好碰到移轉網站時有外掛資料特例處理,導致內容連結失效的問題。
關於移轉網站,先前也曾在粉絲頁裡發文聊過:
- Powered by Mxp.TW -FB2WP-
面對 WordPress 把網域名稱也視為內容寫進每筆資料庫保存這件事,移轉網域就有不少細節要注意。
轉移前,不只是主題本身,還有外掛的儲存方式都要去研究一下,有些可能是寫入 wp_options
資料表,有些把內容存在 wp_postmeta
資料表,還有些是把設定內容發成一篇一篇獨立的內容類型(Content Type)寫在 wp_posts
裡,再來有遇過獨樹一格有資料庫不用,自己要開一個檔案寫入 uploads
或其他目錄下的..等等等。
知道內容寫到哪裡,剩下就是去替換網域字串就能完成移轉,但是如果這個內容有加密編碼過,那就要另外處理了。
昨天碰到的外掛「Scroll Magic」就是不只把設定參數寫到 wp_posts
裡,還把每一篇內容都給 base64_encode
過。想必移轉時做資料庫字串取代都無法處理。
但好在大部分應用都有機會是包裝成短碼 Shortcode
來呼叫使用,不然就是安插在哪個設計過的 Hook
機制裡來操作。
WordPress 常見的 Action
或 Filter
都可以有機會覆寫,但包裝在短碼裡的,如果無法在短碼裡調整,那最後一招就是從「執行短碼」的時機點(Filter)下手!
也就是本文重點: do_shortcode_tag
以本篇使用的外掛為例,如果無法(因為加密編碼過)快速的取代每一個設定裡保存的舊網域名稱,那就在短碼輸出的時候去全文取代過。
function mxp_fixed_domain_for_newsite( $output, $tag , $attr, $m) {
if ( 'bb_scrollmagic_scene' === $tag ) {
return str_replace('舊網域','當前網域', $output);
}
return $output;
}
add_filter('do_shortcode_tag', 'mxp_fixed_domain_for_newsite', 11, 4);
意思就是攔截呼叫到的短碼,並把其輸出內容中的網域名稱做替換。
整體雖談不上好解法,但如果還有機會要再移轉一次網站網域的時候,就能無痛一點完成囉!
對這個 Hook
的解讀也算是多一層概念叫做「對全站短碼輸出的影響」,如此彈性,就能在不動到任何其他協作者原始碼的前提下完成當前任務了~