Я использую динамическое ценообразование для дисконтирования товара, чтобы освободить друг друга. Я хочу не допустить, чтобы клиент добавил бесплатный продукт в качестве отдельного шага и просто позволил системе добавить его.
Я начал с отрывок но я не могу заставить это работать, когда элемент присутствует
это то, что я получил так далеко:
<?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' );
?>
Спасибо!
Если я правильно понял ваш вопрос, вы хотите сделать товар бесплатным, если в корзине есть определенные товары. Вот мое решение:
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.
}
}
}
}
Надеюсь это поможет!
Ваша логика здесь совершенно неверна, потому что 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 );
}
}
}
НОТА: Не проверено. Так что дайте мне знать результат.