[WordPress] Shortcode 內容攔截(Filter)修改調整的方法(Hook)

本篇文章更新時間: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 常見的 ActionFilter 都可以有機會覆寫,但包裝在短碼裡的,如果無法在短碼裡調整,那最後一招就是從「執行短碼」的時機點(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 的解讀也算是多一層概念叫做「對全站短碼輸出的影響」,如此彈性,就能在不動到任何其他協作者原始碼的前提下完成當前任務了~


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____34%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章
Filter

Filter Search Results