Conditional action hook

时间:2018-05-02 作者:djoo

我只想在没有特定产品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\');});
但效果不太好。怎么了?我该怎么做?有什么想法吗?:/

谢谢

1 个回复
最合适的回答,由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
再次添加按钮。

您应该检查钩子中函数的执行顺序。

结束

相关推荐

Wordpress Admin Tooltip hooks

我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢