我只想在没有特定产品ID的情况下添加下面的操作挂钩。所以我在函数中尝试了类似的方法。php
global $product;
$productId = $product->get_id();
if ($productId != 1345){
add_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 10 );
}
但是,从函数中调用$product变量是不可能的。
所以我试着这么做
function woocommerce_add_new_add_to_cart(){
global $product;
$productId = $product->get_id();
if ($productId != 1345){
add_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 10 );
}
}
add_action(\'woocommerce_single_product_summary\', \'woocommerce_add_new_add_to_cart\', 10);
但效果并不好。
于是我找到了这篇帖子:Is it possible to create an action hook using do_action() within add_action()?
我试过这个
function woocommerce_add_new_add_to_cart(){
global $product;
$productId = $product->get_id();
if ($productId != 1345){
add_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 10 );
}
}
add_action(\'woocommerce_single_product_summary\', function(){do_action(\'woocommerce_add_new_add_to_cart\');});
但效果不太好。怎么了?我该怎么做?有什么想法吗?:/
谢谢
最合适的回答,由SO网友:Bikash Waiba 整理而成
Woocommerce在优先级为30的位置添加了动作挂钩。
add_action(\'woocommerce_single_product_summary\',\'woocommerce_template_single_add_to_cart\',30);
那么,你可能已经做到了
remove_action(\'woocommerce_single_product_summary\',\'woocommerce_template_single_add_to_cart\',30);
从挂钩上移除动作。要删除操作,优先级必须与最初添加的函数的优先级相匹配。
现在你可以
function add_cart_button(){
global $product;
$id = $product->get_id();
if($id != 1345 ):
add_action(\'woocommerce_single_product_summary\',\'woocommerce_template_single_add_to_cart\',30); // You should note this should trigger later tested at 20, 30, 35 working
endif;
}
add_action(\'woocommerce_single_product_summary\',\'add_cart_button\'); // This triggers at 10 by default
再次添加按钮。
您应该检查钩子中函数的执行顺序。