在购物车中隐藏产品类别的优惠券字段

时间:2016-09-03 19:06:32

标签: php wordpress woocommerce categories cart

我试图隐藏购物车中的优惠券代码字段以查找一些被排除的产品。我已添加了产品类别,并从优惠券使用中排除了此类别。

代码段会限制购物车,因此一次只允许一种商品。在这种情况下,不必显示被排除产品的优惠券代码。验证不会让用户应用优惠券,但如果他们甚至没有看到优惠券字段会更好。

这是我发现的一个代码段,它找到了一个产品类别并显示了一条消息:

// Find product category
add_action( 'woocommerce_check_cart_items', 'checking_cart_items', 12 );
function checking_cart_items() {
// set your special category name, slug or ID here:
$special_cat = 'myproductcategory';
$bool = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $item = $cart_item['data'];
    if ( has_term( $special_cat, 'product_cat', $item->id ) )
        $bool = true;
}
// Displays a message if category is found
if ($bool)
    echo '<div class="checkoutdisc">A custom message displayed.</div>';

}

这是隐藏优惠券代码的常规代码段:

// hide coupon field on cart page
function hide_coupon_field_on_cart( $enabled ) {

if ( is_cart() ) {
    $enabled = false;
}

return $enabled;
}
add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field_on_cart' );

如何让这些功能协同工作?

由于

1 个答案:

答案 0 :(得分:4)

  

更新:与WooComerce 3 +的兼容性

是的,可以使用这种代码组合:

add_filter( 'woocommerce_coupons_enabled', 'conditionally_hide_cart_coupon_field' );
function conditionally_hide_cart_coupon_field( $enabled ) {
    // Set your special category name, slug or ID here:
    $special_cat = array('clothing');
    $bool = false;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $wc_product = $cart_item['data'];
        // Woocommerce compatibility
        $product_id = method_exists( $wc_product, 'get_id' ) ? $wc_product->get_id() : $wc_product->id;

        $main_product_id = $cart_item['variation_id'] > 0 ? $cart_item['product_id'] : $product_id;
        if ( has_term( $special_cat, 'product_cat', $main_product_id ) )
            $bool = true;
    }

    if ( $bool && is_cart() ) {
        $enabled = false;
    }
    return $enabled;
}

当然,这可以在您的活动子主题(或主题)的function.php文件中,也可以在任何插件文件中。

此代码经过测试且有效。

参考文献: