woocommerce根据产品ID删除操作

时间:2014-08-18 13:28:23

标签: php wordpress woocommerce

每个人,我试图阻止插件功能执行,如果某个产品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的工作基础上,整个网站就无法加载。谢谢!

1 个答案:

答案 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
}