Обязательный купон для определенных категорий товаров, позволяющий избежать оформления заказа в Woocommerce

Я ищу, чтобы создать «коды приглашения», используя умные купоны WooCommerce. Для этого я хочу, чтобы определенные продукты запрашивали код купона в корзине / оформить заказ. Я видел способы сделать это, однако они влияют на все продукты, а не только те, которые я хочу.

Я пытаюсь передать возвращенную переменную в другую функцию, однако я не могу понять, как это сделать.

Вот последняя версия:

            //Check to see if user has product with a specific product category in cart
function check_product_in_cart() {

global $woocommerce;

//assigns a default negative value
//  categories targeted 87, 18, 19

$product_in_cart = false;

// start of the loop that fetches the cart items

foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );

// second level loop search, in case some items have several categories
foreach ($terms as $term) {
$_categoryid = $term->term_id;
if (( $_categoryid === 87 ) || ( $_categoryid === 18 ) || ( $_categoryid === 19 )) {
//category is in cart!
$product_in_cart = true;
}
}
}

return $product_in_cart;
}

// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'force_coupon_code');

function force_coupon_code( $product_in_cart )
{
global $woocommerce;
if(is_cart() || is_checkout()){
$my_coupon = $woocommerce->cart->applied_coupons;
echo $woocommerce->cart->get_applied_coupons;
if(empty($my_coupon))
{
wc_add_notice( '<strong>' . $btn['label'] . '</strong> ' . __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}
}

Первая часть должна возвращать продукт $ product_in_cart, а вторая часть — купон. Вот источники кода, который я использую.
Обязательный код купона а также Проверка товаров в корзине на основе категории. Я читал, что размещение переменной внутри новой функции args может достичь этого вот так, однако это ни в коем случае не работает.

1

Решение

обновленный на 2018-04-01

Код, который вы используете, устарел и сложен. Это можно сделать просто в одной подключенной функции, используя вместо WordPress has_term() условная функция для определения того, относится ли товар к определенной категории товаров.

Так что ваш код будет намного более компактным и эффективным:

// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'mandatory_coupon_code');
function mandatory_coupon_code()
{
// set Here your categories IDs, slugs or names
$categories = array(18,19,87);
$found = false;

// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item )
if( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ){
// Product category found in cart items
$found = true;
// Exit from loop
break;
}
}
$coupons = WC()->cart->get_applied_coupons();

// The Notice is displayed for that product categories when no mandatory coupon has been entered
if( count( $coupons ) > 0 && $found )
wc_add_notice( __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}

Этот код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.


Версия для определенного кода купона и без товарных категорий (для всех товаров):

add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
// HERE set your coupon code
$mandatory_coupon = 'spring10';

$applied_coupons = WC()->cart->get_applied_coupons();

// If coupon is found we exit
if( in_array( $mandatory_coupon, $applied_coupons ) ) return;

// Not found: display an error notice
wc_add_notice( __( 'Please enter coupon code to checkout.', 'woocommerce' ), 'error' );
}

Этот код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

2

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

Других решений пока нет …

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