問題描述

我有一個主題,包括一些設置,使用 after_setup_theme,但我想編寫我自己的功能,也需要運行 after_setup_theme 。我寧願將我的東西保存在一個單獨的文件中。可以多次調用 after_setup_theme 嗎?

最佳解決方案

WordPress 鈎子像好萊塢一樣工作:你不叫他們,他們調用你。但不像好萊塢,他們不斷呼籲名單上的所有人。

動作或過濾器將多個功能掛鈎,不同的插件,甚至是不同的 functions in the WordPress core that all do something specific,這是正常現象。不僅可能,甚至是良好的做法,因為這意味着你的代碼變得更清晰 (每個功能只有一件事情),並且通過解除它來容易地禁用一個特定的功能。

請記住,您還可以使用掛鈎的優先級:如果要在 after_setup_theme 中運行 functionA() 和 functionB(),但是 functionA() 必須在 functionB() 之前運行,則可以使用默認優先級掛起 functionA() 10 和優先級為 20 的 functionB()(或 10 以上的任何其他數字) 。在該動作正在執行時,將動作的另一個功能掛起來是不行的。所以你不能將 functionB() 從函數 A() 調用 after_setup_theme,在 after_setup_theme 上調用。你可以直接調用它,但是你會失去單獨的鈎子的好處。

次佳解決方案

是的,您可以根據需要添加儘可能多的操作。去嘗試一下。

第三種解決方案

我的建議是有一個”master” 函數,如果你願意的話,調用所有其他功能。這樣一來,你只需要一次鈎住這個動作。

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

這樣做的另外一個好處是能夠返回可以在隨後的函數調用中使用的值。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。