不知道为什么,但对于第二个代码段,更改嵌套add_action
从默认值(10)到20,导致父级和子级add_action
以不同的优先级解决问题,现在一切都很好:add_action( \'template_redirect\',
function() use ( $args ) { acau_enqueue_script ( $args ); }, 20);
原因很简单。因为WordPress支持嵌套挂钩,这意味着您可以向同一个/父挂钩添加另一个回调(例如。template_redirect
如果优先级大于父回调的优先级,则会调用附加回调。
案例1:在这种情况下,只有some_func2()
这将被执行。因为它的优先级是12
, 大于父回调(即闭包)。
add_action( \'template_redirect\', function(){
add_action( \'template_redirect\', \'some_func\', 11 ); // first child hook
add_action( \'template_redirect\', \'some_func2\', 12 ); // second child hook
}, 11 ); // parent hook
案例2:在这种情况下,两者
some_func()
和
some_func2()
将被执行。因为它们的优先级再次大于父回调的优先级。
add_action( \'template_redirect\', function(){
add_action( \'template_redirect\', \'some_func\', 11 ); // first child hook
add_action( \'template_redirect\', \'some_func2\', 12 ); // second child hook
} ); // parent hook with the default priority (10)
因此,在注册嵌套挂钩时,请确保回调的优先级高于父级。
使用嵌套钩子的替代方法,因此这是关于wc_enqueue_js()
仅在购物车页面上
你可以试试其中一种,它对我很有效:
钩住wp
, 然后挂钩acau_enqueue_script()
到template_redirect
:
add_action( \'wp\', function(){
if ( is_cart() ) {
add_action( \'template_redirect\', \'acau_enqueue_script\' );
}
} );
钩住
template_redirect
, 然后挂钩
acau_enqueue_script
到
wp_footer
(WooCommerce使用此挂钩打印通过
wc_enqueue_js()
):
add_action( \'template_redirect\', function(){
if ( is_cart() ) {
add_action( \'wp_footer\', \'acau_enqueue_script\' );
}
} );