首页 > 解决方案 > 优先顺序如何影响 WordPress 中的 add_action 和 do_action 链?

问题描述

我在 WordPress 中有两个动作“链”(add_action's 和do_action' 链接在一起),我需要在开始第二个链之前完成所有第一个链。

使用priority顺序我可以一个接一个地触发每个链的启动,但是我担心当第二个链启动时,第一个链中间的一个大循环仍然会运行。

例子:

由于first_chain_first_loop动作的优先级为10,并且second_chain_first_loop动作的优先级为11,整个第一个动作链(first_chain_first_loop+ first_chain_second_loop)会在second_chain_first_loop开始之前处理吗?

还是完成second_chain_first_loop后立即开始first_chain_first_loop?如果是这种情况,我如何确保第二个链在触发第二个链之前等待第一个链完成(包括大循环)。

//First chain of actions - Has early priority but a large loop in the middle
add_action( 'init', 'first_chain_first_loop', 10 );
function first_chain_first_loop() {
    for ( $i=0; $i < 10; ++$i ) {
        do_action( 'first_chain_second_loop_action', $i );
    }
}
add_action( 'first_chain_second_loop_action', 'first_chain_second_loop', 10, 1 );
function first_chain_second_loop( $i ) {
    for ( $i=0; $i < 1000000000; ++$i ) {
        do_action( 'first_chain_logic_function_action', $i );
    }
}
add_action( 'first_chain_logic_function_action', 'first_chain_logic_function', 10, 1 );
function first_chain_logic_function( $i ) {
    //Do stuff here
}


//Second chain of actions  - Has later priority
add_action( 'init', 'second_chain_first_loop', 11 );
function second_chain_first_loop() {
    for ( $i=0; $i < 10; ++$i ) {
        do_action( 'second_chain_second_loop_action',  $i );
    }
}
add_action( 'second_chain_second_loop_action', 'second_chain_second_loop', 10, 1 );
function second_chain_second_loop( $i ) {
    for ( $i=0; $i < 10; ++$i ) {
        do_action( 'second_chain_logic_function_action', $i );
    }
}
add_action( 'second_chain_logic_function_action', 'second_chain_logic_function', 10, 1 );
function second_chain_logic_function( $i ) {
    //Do stuff here
}

标签: wordpress

解决方案


推荐阅读