我正在努力实现以下目标:
如果产品2在购物车中,如何制作产品1 = 0美元以及所有添加的产品类别为图书$ 0?
我的想法是,如果客户购买某种产品,则免费提供产品类别的所有产品。
到目前为止,我得到了这个,但是它没有用,并且正在将所有产品放入购物车$0
:
add_action( 'woocommerce_before_calculate_totals', 'change_price_if_6245_in_cart' );
function change_price_if_6245_in_cart( $cart_object ) {
if (woo_in_cartbooks (6245) ) {
// set our flag to be false until we find a product in that category
$cat_check = false;
// check each cart item for our category
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
// replace 'books' with your category's slug
if ( has_term( 'books', 'product_cat', $product->id ) ) {
$cat_check = true;
// break because we only need one "true" to matter here
break;
}
}
// if a product in the cart is in our category, do something
if ( $cat_check ) {
// we have the category, do what we want
foreach ( $cart_object->get_cart() as $hash => $value ) {
$value['data']->set_price( 0 );
}
}
}
答案 0 :(得分:2)
以下是使其正常工作的正确方法(代码已注释):
add_action( 'woocommerce_before_calculate_totals', 'free_product_category_for_a_specific_product', 20, 1 );
function free_product_category_for_a_specific_product( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE Below your settings
$product_category = "books"; // <= The product category (can be an ID, a slug or a name)
$specific_product_id = 6245; // <= The specific product ID
$found = false;
// 1st cart items Loop: Check for specific product
foreach ( $cart->get_cart() as $cart_item ) {
// Check for 'books' with your category's slug
if ( $cart_item['data']->get_id() == $specific_product_id ) {
$found = true;
break; // Found, we stop first loop
}
}
// If specific product is not in cart we exit
if( ! $found )
return;
// 2nd cart items Loop: check items remaining to "Books" product category when specific product is in cart
foreach ( $cart->get_cart() as $cart_item ) {
// If specific product has been found, we set price to 0 for items remaining to "Books" product category
if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) ) {
$cart_item['data']->set_price( 0 );
}
}
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。