简体   繁体   English

自动将产品添加到购物车,部分 WooCommerce 产品类别除外

[英]Auto add product to cart except for some WooCommerce product categories

I am using Auto add a product for cart item from specific product categories in WooCommerce answer code to auto add a free product to the cart.我正在使用自动为 WooCommerce 答案代码中特定产品类别的购物车项目添加产品,以自动将免费产品添加到购物车。 The code works great if the product is in a specific category but I need to add the product if it is NOT in a specific category.如果产品属于特定类别,则代码效果很好,但如果产品不在特定类别中,我需要添加产品。

I am able to add the free product if it is not in the specific category with this edit:如果免费产品不在此编辑的特定类别中,我可以添加它:

if( **!** has_term( $required_categories, 'product_cat', $item['product_id'] ) ) {
    $matched_category = true;
}

But this does not remove the free product when the parent product is removed.但这不会在删除父产品时删除免费产品。

Any help would be appreciated!任何帮助,将不胜感激!

Updated: Here are the changes that are required to "auto add a product in cart except for specific defined product categories (not removing the auto added product if mixed categories are in cart) :更新:以下是“自动将产品添加到购物车中所需的更改,特定定义的产品类别除外(如果购物车中包含混合类别,则不删除自动添加的产品)

add_action( 'woocommerce_before_calculate_totals', 'auto_add_item_except_for_product_category', 10, 1 );
function auto_add_item_except_for_product_category( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Settings
    $except_terms  = array('t-shirts'); // Required product category(ies)
    $auto_added_id = 70; // Specific product to be added automatically

    $except_found  = false;
    $others_found  = false;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        // Check for product category
        if( has_term( $except_terms, 'product_cat', $cart_item['product_id'] ) ) {
            $except_found = true;
        } else {
            $others_found = true;
        } 

        // Check if specific product is already auto added
        if( $cart_item['data']->get_id() == $auto_added_id ) {
            $auto_added_item_key = $cart_item_key; // keep cart item key
        }
    }

    // If auto added product is in cart with at least an item from a the defined product category only
    if ( isset($auto_added_item_key) && $except_found && ! $others_found ) {
        $cart->remove_cart_item( $auto_added_item_key ); // Remove specific product
    }
    // If there is at least an item from others product categories and the specific product is not in cart
    elseif ( ! isset($auto_added_item_key) && ! $except_found ) {
        $cart->add_to_cart( $auto_added_id ); // Add specific product
    }
}

Code goes in functions.php file of your active child theme (or active theme).代码进入您的活动子主题(或活动主题)的functions.php 文件。 Tested and works.测试和工作。

Based on: Auto add a product for cart item from specific product categories in WooCommerce基于: 自动为 WooCommerce 中特定产品类别的购物车项目添加产品

Might be able to hook into the Woo's remove item from cart hook:可能能够从购物车钩子中钩入 Woo 的移除物品:

function remove_free_item() {
    if ( is_admin() ) {
        return;
    }
    
    $product_id = 'ID_OF_FREE_ITEM';
    $product_cart_id = WC()->cart->generate_cart_id( $product_id );
    $cart_item_key = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $cart_item_key ) {
        WC()->cart->remove_cart_item( $cart_item_key );
    }
}


add_action( 'woocommerce_cart_item_removed', 'after_remove_product_from_cart', 10, 2 );
function after_remove_product_from_cart($removed_cart_item_key, $cart) {
    // removed item
    $line_item = $cart->removed_cart_contents[ $removed_cart_item_key ];

    // removed item product id
    $product_id = $line_item[ 'product_id' ];

    // might need to wrap this in some check depending on your case
    remove_free_item();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Woocommerce 3中自动将产品添加到购物车 - Auto add a Product to Cart in Woocommerce 3 隐藏产品价格并禁用 Woocommerce 中特定产品类别的添加到购物车 - Hide product price and disable add to cart for specific product categories in Woocommerce Woocommerce:按用户元自动将产品添加到购物车 - Woocommerce: auto add product to cart by user meta 避免在WooCommerce中添加来自不同产品类别的购物车产品 - Avoid add to cart products from different product categories in WooCommerce Ajax上的JS警报添加到购物车中Woocommerce中多个产品类别的计数 - JS alert on ajax add to cart for multiple product categories count in Woocommerce 如果用户未登录 Woocommerce,请避免将特定产品类别添加到购物车 - Avoid add to cart for specific product categories if user is unlogged in Woocommerce 根据Woocommerce中的父产品类别更改“添加到购物车”按钮文本 - Change Add To Cart button text based on parent product categories in Woocommerce 在特定的WooCommerce产品类别上自定义“添加到购物车”按钮 - Customize Add to Cart button on specific WooCommerce product categories Woocommerce - 仅在某些类别(或除某些类别之外的所有购物车)中根据重量在购物车中添加附加费 - Woocommerce - add surcharge in cart based on weight only to some categories (or to all cart except some categories) WooCommerce中特定产品类别的最低购物车数量 - Minimum cart amount for specific product categories in WooCommerce
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM