禁用Woocommerce中特定类别的购物车商品的其他产品类别 [英] Disable other product categories for a cart item from specific category in Woocommerce

查看:95
本文介绍了禁用Woocommerce中特定类别的购物车商品的其他产品类别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个具有不同方面的网上商店,第一个是常规商店,第二个是夜啤酒服务.我已经搜索过但找不到我想要的东西;

I'm developing a webshop, with different aspects, the first is a regular shop, and the second is a night beer service. i've searched but can't find what i am looking for;

首先,夜啤酒服务是不应该与常规物品一起订购的特定类别(如果购物车中包含类别'beerservice',则禁止将所有其他类别添加到购物车中.)

First the night beer service is a specific category that shouldn't be ordered with the regular items (if category 'beerservice' is in the cart, disable all other categories to be added to the cart).

此选项也需要反之亦然(另一个麻烦),因此,如果将常规商品添加到购物车,则应禁用'beerservice'的类别才能添加到购物车.

This option also needs to work vice-versa (the other wat around), so if a regular item is added to the cart, the category of 'beerservice' should be disabled to add to the cart.

我正在使用以下发现的答案代码:

I am using this answer code that I have found:
Disable shopping when an item from a specific product category is in cart in Woocommerce

这可以部分完成这项工作,但是只能添加同一类别中的多个产品,并且反之亦然.我已替换为这段代码

That does the job partially, but it's only impossible to add multiple products from the same category, and is doesn't work vice-vera. I have replaced in this code

我还想添加一个特定于时间的消息,例如不会交付超过TIME的订单"(对此不做研究),但是如果麻烦不大的话.

I also would like to add a time specific message like, 'Order ordered past TIME won't be delivered'(didn't research this) but if it isn't to much trouble.

推荐答案

此代码将检查父产品类别,因此对于已定义的产品类别,它将:

This code will check for parent product categories, so for a defined product category, it will:

  • 当已定义类别位于购物车中时,请避免将其他产品类别添加到购物车中.
  • 将已定义类别的产品添加到购物车时,它将从其他产品类别中删除购物车项目.

改进的代码:

// Custom conditional function that checks for parent product categories
function has_parent_term( $product_id ) {
    // HERE set your targeted product category SLUG
    $category_slug = 'beerservice'; //  <====  <====  <====  <====  <====  <====  <====

    // Convert category term slug to term id
    $category_id   = get_term_by('slug', $category_slug, 'product_cat')->term_id;
    $parent_term_ids = array(); // Initializing

    // Loop through the current product category terms to get only parent main category term
    foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
        if( $term->parent > 0 ){
            $parent_term_ids[] = $term->parent; // Set the parent product category
        } else {
            $parent_term_ids[] = $term->term_id;
        }
    }
    return in_array( $category_id, $parent_term_ids );
}

// Avoid add to cart others product categories when "beerservice" is in cart
add_filter( 'woocommerce_add_to_cart_validation', 'specific_category_avoid_add_to_cart_others', 20, 3 );
function specific_category_avoid_add_to_cart_others( $passed, $product_id, $quantity) {
    if( WC()->cart->is_empty() || has_parent_term( $product_id ) ) {
        return $passed;
    }

    foreach( WC()->cart->get_cart() as $cart_item ){
        if( has_parent_term( $cart_item['product_id'] ) ) {
            wc_add_notice( __('Alert message 1 (avoid add to cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
            return false; // Avoid add to cart
        }
    }
    return $passed;
}

// Remove other items when our specific product is added to cart
add_action( 'woocommerce_add_to_cart', 'conditionally_remove_other_products', 20, 4 );
function conditionally_remove_other_products ( $cart_item_key, $product_id, $quantity, $variation_id ){
    if( has_parent_term( $product_id ) ) {
        foreach( WC()->cart->get_cart() as $item_key => $cart_item ){
            if( ! has_parent_term( $cart_item['product_id'] ) ) {
                WC()->cart->remove_cart_item( $item_key );
                wc_add_notice( __('Alert message 2 (Item removed from cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
            }
        }
    }
}

代码进入您的活动子主题(活动主题)的function.php文件中.经过测试,可以正常工作.

Code goes in function.php file of your active child theme (active theme). Tested and works.

相关: 查看全文

相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆