2017-01-24 6 views
3

Я пытаюсь автоматически применять купоны в своем магазине WooCommerce на основе идентификационных номеров и количества товаров. Моя конечная цель заключается в том, что конкретный купон будет автоматически применяться, если в корзину будут добавлены два (2) желаемых продуктов, а для другого купона на приложение y автоматически, когда в корзину будут добавлены ТРЕХ (3) желаемых продуктов. Единственное количество продукта не должно иметь никакой скидки. Ниже приводится исправленный вариант кода, который теперь работает:Условно примените купоны для определенных идентификаторов продуктов и их количества

add_action('woocommerce_before_cart', 'conditional_auto_add_coupons'); 
function conditional_auto_add_coupons() { 

if (!WC()->cart->is_empty()){ 

    // Define HERE your Targeted Product ID and coupons codes 
    $target_pid = 103; 
    $coupon1 = 'soccer-sibling-2'; 
    $coupon2 = 'soccer-sibling-3'; 

    // First cart loop: Counting number of subactegory items in cart 
    foreach (WC()->cart->get_cart() as $cart_item){ 
     if($target_pid == $cart_item['data']->id){ 
      // Removes any coupons in the cart already 
      WC()->cart->remove_coupons(); 
      if(2 == WC()->cart->get_cart_contents_count() && !WC()->cart->has_discount($coupon1)){ 
       WC()->cart->remove_coupons(); 
       WC()->cart->add_discount($coupon1); 
       wc_add_notice(__('The multiple sibling discount has been applied.', 'theme_domain'), 'success'); 
      } elseif(3 == WC()->cart->get_cart_contents_count() && !WC()->cart->has_discount($coupon2)){ 
       WC()->cart->remove_coupons(); 
       WC()->cart->add_discount($coupon2); 
       wc_add_notice(__('The multiple sibling discount has been applied.', 'theme_domain'), 'success'); 
      } 
      // Recalculates Cart Totals to show correct price 
      WC()->cart->calculate_totals(); 
     } 
    } 
    } 
} 
+0

Какое сообщение об ошибке вы получаете? –

+0

Ну, я заметил, что в моем вставленном коде была синтаксическая ошибка. Исправлено это. Ошибка, которую я получаю, когда я отлаживаю «Замечание: попытка получить свойство не-объекта в /home/...functions.php в строке 333». Соответствующая строка является условной 'if ($ _product-> id == $ product_id)' – GDailey

ответ

2

Theres много ошибок в коде, и это немного устарели тоже ... я перезапись everithing в функции и зацепил его в другой крючок.

Вот ваш код повторно:

add_action('woocommerce_before_cart', 'conditional_auto_add_coupons'); 
function conditional_auto_add_coupons() { 

    if (!WC()->cart->is_empty()){ 

     // Define HERE your Targeted Product ID and coupons codes 
     $target_pid = 103; 
     $coupon1 = 'soccer-sibling-2'; 
     $coupon2 = 'soccer-sibling-3'; 

     // First cart loop: Counting number of subactegory items in cart 
     foreach (WC()->cart->get_cart() as $cart_item){ 
      if($target_pid == $cart_item['data']->id){ 
       if(2 == WC()->cart->get_cart_contents_count() && !WC()->cart->has_discount($coupon1)){ 
        WC()->cart->add_discount($coupon1); 
        wc_add_notice(__('A quantity discount of <strong>5%</strong> has been added.', 'theme_domain'), 'success'); 
       } elseif(3 == WC()->cart->get_cart_contents_count() && !WC()->cart->has_discount($coupon2)){ 
        WC()->cart->add_discount($coupon2); 
        wc_add_notice(__('A quantity discount of <strong>10%</strong> has been added.', 'theme_domain'), 'success'); 
       } 
      } 
     } 
    } 
} 

Этот код идет в function.php файле Вашего активного ребенка темы (или темы), или же в любом файле плагина.

Это должно работать и не будет приводить к сбою вашего сайта, но я его не проверял, так как это очень важно.

+0

Ваш код работал хорошо. Я добавил две небольшие строки, чтобы исправить одну проблему: всякий раз, когда я менял количество из корзины, она применяла бы вторую скидку, но не удаляла бы первую. Если бы я уменьшил количество до ОДНОГО, тогда он будет поддерживать любые скидки. Я добавил строки в свой код, чтобы удалить скидки, добавленные до применения желаемого автоматического купона, а затем еще один для пересчета итогов, чтобы на странице корзины отображалась правильная сумма. Я добавил ваш код с моими дополнениями к исходному сообщению. Благодаря! – GDailey