WooCommerce - 自动添加奖励产品
问题描述:
我想为WooCommerce购物车自动添加奖励产品的脚本。WooCommerce - 自动添加奖励产品
奖励产品将添加到购物车中添加特定产品。但是我从来没有见过任何改进和完整的功能代码 - 例如自动删除奖励物品或从购物车中删除主要产品。
在这个解决方案,我想出了下面的代码,具有以下特点:
- 选项
- 多重需要的产品
- 自动添加
- 自动删除(如果没有购物车里需要的商品)
function bonus_product() {
if (is_admin()) return;
//## OPTIONS
$options = (object) array(
'bonus_product_id' => 1891, //bonus product to add
'required_products_id' => array(1873), //at least on of the specific product(s) needs to be represented in the cart
);
//function variables
$cart_items = WC()->cart->get_cart();
$bonus_product_found = false;
$required_product_found = false;
//check if the cart is not empty
if(sizeof($cart_items) > 0) {
//checking for required products. loop through the cart items
foreach ($cart_items as $key => $item) {
//bonus product already in the cart?
if($item['product_id'] == $options->bonus_product_id) {
$bonus_product_found = true;
}
//one of required products in the cart?
if(in_array($item['product_id'], $options->required_products_id)) {
$required_product_found = true;
}
}
//adding/removing bonus product
//add bonus product to the cart
if(!$bonus_product_found && $required_product_found) {
WC()->cart->add_to_cart($options->bonus_product_id);
}
//remove bonus product from the cart if none of required items is in the cart
if($bonus_product_found && !$required_product_found) {
$cart = WC()->instance()->cart;
$cart_id = $cart->generate_cart_id($options->bonus_product_id);
$cart_item_id = $cart->find_product_in_cart($cart_id);
$cart->set_quantity($cart_item_id, 0);
}
}
}
add_action('init', 'bonus_product');
答
我写了另一个版本的基础上,Add To Cart
和Remove From Cart
行动,这似乎是更合适的。
$bonus_options = (object) array(
'bonus_product_id' => 1891,
'required_products_id' => array(1873)
);
// this function called whenever there is a product added to cart
function add_bonus_product($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {
global $bonus_options;
// is the product is eligible for bonus product?
if(in_array($product_id, $bonus_options->required_products_id)) {
// add the bonus product to cart
WC()->cart->add_to_cart($bonus_options->bonus_product_id, 1, 0, array(), array("parent_product_line_item" => $cart_item_key));
// later if user removes the product from cart we can use the "parent_product_line_item" to remove the bonus product as well
}
}
add_action('woocommerce_add_to_cart', 'add_bonus_product', 10, 6);
// this function will be called whenever there is a product removed from cart
function remove_bonus_product($cart_item_key, $cart) {
$cart_items = WC()->cart->get_cart();
foreach ($cart_items as $key => $item) {
if($item["parent_product_line_item"] == $cart_item_key) {
// ok this cart item is a bonus item to the product that being removed from the cart
// So remove this too
WC()->cart->remove_cart_item($key);
}
}
}
add_action('woocommerce_cart_item_removed', 'remove_bonus_product', 10, 2);
谢谢。这很棒! –
@the_ousek如果有效,请接受答案。 – Sark