问题描述

我有一个主题,包括一些设置,使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。