每个人,我试图阻止插件功能执行,如果某个产品ID在购物车中。我已经尝试并编写了以下代码并将它们放在我的主题functions.php中,但它似乎不起作用。相反,整个页面变成空白。谁能帮我吗?
$found = false;
global $woocommerce;
foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if( $_product->id == 1097 ) {
$found = true;
}
}
if ($found){
remove_action('woocommerce_before_order_notes', array($wdt, 'show_field'), 20);
}
单独使用remove_action('woocommerce_before_order_notes', array($wdt, 'show_field'), 20);
。但是,一旦我尝试将其链接到产品ID的工作基础上,整个网站就无法加载。谢谢!
答案 0 :(得分:0)
变量$wdt
没有接缝要初始化。您应该在此处使用类名(字符串)或该类的实例。
另一个猜测是您的代码在添加操作之前运行。确保在执行的后续钩子上运行代码,请参阅此参考:http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request
因此,如果添加挂钩的代码在init
运行,您可以尝试在wp_loaded
运行代码。像这样:
add_action('wp_loaded','my_remove_order_notes');
function my_remove_order_notes()
{
//Your code
}
此外,请确保优先级参数与添加操作挂钩的代码匹配。默认优先级为10.
编辑: 好的,你不应该删除过滤器。过滤器应该用于操作数据并返回新数据。像这样:
add_filter( 'woocommerce_checkout_fields' , 'custom_remove_order_comments', 99 );
function custom_remove_order_comments( $fields )
{
global $woocommerce;
foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if( $_product->id == 1097 ) {
unset($fields['order']['order_comments']); //Remove the order comments field
}
return $fields; //Return the data back to WooCommerce
}