[WordPress] 開發 Hook 呼叫方法時避免無窮迴圈(Infinite Recursion)的方法

本篇文章更新時間:2020/04/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


程式撰寫不怕寫錯語法,怕邏輯不正確。寫錯還有解譯器跳出錯誤提示訊息,但邏輯錯造成的問題就比較難解了!

尤其是把程式寫成無窮迴圈,執行時會在一瞬間把系統資源吃光,導致執行錯誤。

WordPress 中模組化了很多東西,從 Actions, Filters 的基礎 Hook 方法到 Shortcode 的短碼方法都是開發上必學的組合技。

先前是在 Shortcode 短碼上遇到:A 短碼中執行同樣的 A 短碼。一但 A 短碼觸發執行,網站就會資源耗盡而掛點。

所以如果要避免這問題發生,記得要加上 has_shortcode 方法來檢查!

而在 Actions 或 Filters 的這種使用情境就要注意是否有在方法內重新呼叫了自己。

剛好看到 How to use update_{$meta_type}_metadata filter to modify meta value 這篇討論,裡面有提到解法。

// Avoid infinite recursion:
remove_filter( current_filter(), __FUNCTION__ ); 

重複呼叫自己前,先把自己註冊的 Filter 給解註冊即可。 (寫成物件導向方法的不適用,需另外寫過解註冊的方法)

這篇是討論註冊了 update_post_meta 的 Filter 方法後,又希望在那方法裡使用 update_post_meta 更新 meta 值的做法。(有夠繞口)


Share:

作者: Chun

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

發佈留言

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