Добавить товар в корзину автоматически при наличии другого товара

Я использую динамическое ценообразование для дисконтирования товара, чтобы освободить друг друга. Я хочу не допустить, чтобы клиент добавил бесплатный продукт в качестве отдельного шага и просто позволил системе добавить его.

Я начал с отрывок но я не могу заставить это работать, когда элемент присутствует

это то, что я получил так далеко:

<?php

function add_product_to_cart() {
if ( ! is_admin() ) {
global $woocommerce;
$product_id_gift = 2287;
$found = false;
$product_id = 30;
$incart_free = false;

foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id ){
$incart_free = true;
}
return $incart_free;
}
if( $incart_free == true ) {
//check if product already in cart
if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id_gift )
$found = true;
}
// if product not found, add it
if ( $found != true  )
$woocommerce->cart->add_to_cart( $product_id_gift );
} else {
// if no products in cart, add it
$woocommerce->cart->add_to_cart( $product_id_gift );
}
}
}
}

add_action( 'init', 'add_product_to_cart' );

?>

Спасибо!

0

Решение

Если я правильно понял ваш вопрос, вы хотите сделать товар бесплатным, если в корзине есть определенные товары. Вот мое решение:

1. Создайте купон для WooCommerce в WordPress. Сделайте сумму купона 100% и тип скидки Продукт% Скидка». Перейдите в Usage Restriction-> Products и укажите конкретный продукт, который вы хотите бесплатно, это сделает купон применяется только к этому конкретному продукту.

2. Создайте функцию, которая будет проверять наличие определенных элементов в корзине и, если да, то добавлять и скидывать элемент, который вы хотите бесплатно добавить в корзину. Следующий код поможет (я протестировал его, и он работал нормально, хотя это не самое чистое решение):

add_action( 'init', 'product_discount' );

function product_discount(){

//variable declerations.
global $woocommerce;
$product_id = 1; // product to add
$products= array('2', '3', '4'); //specific product(s) to be present in the cart
$coupon_code = 'abc'; // coupon code from wp

//get the cart contents.
$cart_items = $woocommerce->cart->get_cart();
//check if the cart is not empty.
if(sizeof($cart_items) > 0){
//loop through the cart items looking for the specific products.
foreach ($cart_items as $key => $item){
//check if the cart items match to any of those in the array and check if the desired product is in the cart.
if(in_array($item['product_id'], $products) && $item['product_id'] != $product_id){
//add course.
$woocommerce->cart->add_to_cart($product_id);
//discount course.
$woocommerce->cart->add_discount(sanitize_text_field($coupon_code));
}else{
break; //to prevent the product from being added again for the next loop.
}
}
}
}

Надеюсь это поможет!

1

Другие решения

Ваша логика здесь совершенно неверна, потому что if ( $_product->id == $product_id_gift ) никогда не будет правдой, так как оба Код товара это отличается.

Так логика должно быть :

1. Проверьте все продукты, которые добавлены в корзину
2. Проверьте, есть ли какие-либо товары в корзине с бесплатными продуктами или нет
3. Если да, то просто добавьте бесплатный продукт.

Так code будет что-то вроде этого:

    add_action( 'init', 'add_product_to_cart' );

function add_product_to_cart() {
if ( ! is_admin() ) {
global $woocommerce;
$product_id = 30; //Your product ID here
$free_product_id = 2287; //Free product ID here
$found = false;
//check if product already in cart
if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id ){
$found = true;
}
}
// if product not found, add it
if ( $found )
$woocommerce->cart->add_to_cart( $free_product_id );
}
}
}

НОТА: Не проверено. Так что дайте мне знать результат.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector