Tôi đang điều hành một cửa hàng WooCommerce, nơi chúng tôi muốn cung cấp cho mọi khách hàng một freebie (sách điện tử) sẽ hiển thị trong giỏ hàng sau khi bạn thêm một sản phẩm cho giỏ rõ ràng.WooCommerce - Tự động thêm hoặc tự động xóa sản phẩm freebie khỏi giỏ hàng
Ví dụ:
Bạn thêm "product1" vào giỏ và giỏ bây giờ sẽ hiển thị 2 sản phẩm. "product1" và "freebie". Khi bạn tháo sản phẩm khỏi giỏ, freebie sẽ bị xóa một lần nữa.
Tôi có mã này cho bây giờ:
add_action('woocommerce_add_to_cart', 'check_freebie_exists', 10, 6);
function check_freebie_exists($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {
if($product_id == 1234) { // obviously replace this with the product that triggers the freebie
/* or you could use
if(has_term($cat_id, 'product_cat', $product_id)) { to check if a product is in a particular product_cat
or you could check anything else related to the product
*/
$hasfreebie = false;
// loop through the cart to check the freebie is not already there
global $woocommerce;
$cart = $woocommerce->cart->get_cart();
foreach($cart as $key => $values) {
if($values['data']->id == $your_freebie_product_id) {
$hasfreebie = true;
break;
}
}
if(!$hasfreebie) {
$woocommerce->cart->add_to_cart($your_freebie_product_id);
}
}
}
add_action('woocommerce_cart_item_removed', 'remove_freebie', 10, 2);
function remove_freebie($cart_item_key, $cart) {
$hasmaster = false;
$freebiekey = NULL;
foreach($cart as $key => $values) {
if($values['data']->id == 1234) { // check that we have the product that should trigger the freebie
$hasmaster = true;
} elseif($values['data']->id == $your_freebie_product_id) {
$freebiekey = $key;
}
}
if(!$hasmaster && $freebiekey) {
$cart->remove_cart_item($freebiekey);
}
}
Nhưng nó dường như không có tác dụng khá được nêu ra.
Tôi đang làm gì sai?
Mọi trợ giúp sẽ thực sự được đánh giá cao.
Cảm ơn.
Cảm ơn bạn, tôi sẽ làm điều đó càng sớm càng tốt. –