我可以在同一动作中做几次钩子?

时间:2011-01-10 作者:gillespieza

我有一个主题,其中包括一些设置,使用after_setup_theme 但我想编写自己的函数,这些函数也需要运行after_setup_theme. 我宁愿把我的东西单独归档。我能打电话吗after_setup_theme 多次?

3 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

WordPress挂钩就像好莱坞一样:你不打电话给他们,他们打电话给你。但与好莱坞不同的是,他们一直在给名单上的每个人打电话。

一个操作或过滤器有多个连接到它的函数是正常的,这些函数来自不同的插件,甚至只是不同的functions in the WordPress core that all do something specific. 这不仅是可能的,甚至是良好的实践,因为这意味着您的代码变得更清晰(每个函数只做一件事),并且通过取消挂钩更容易禁用一个特定的功能。

记住,您还可以使用挂钩的优先级:如果您想同时运行这两个选项functionA()functionB()after_setup_theme, 但是functionA() 必须在之前运行functionB(), 你可以钩住functionA() 具有默认优先级10functionB() 具有优先权20 (或10以上的任何其他数字)。当一个动作正在执行时,将另一个函数挂接到该动作是行不通的。所以你不能上钩functionB()after_setup_theme 从…起functionA(), 已调用after_setup_theme. 您可以直接调用它,但会失去单独挂钩的好处。

SO网友:Aaron Wagner

我的建议是有一个“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 */}
这样做的另一个好处是能够返回可以在后续函数调用中使用的值。

SO网友:fuxia

是的,您可以根据需要向挂钩添加任意多个操作。试试看。

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s