Woocommerce checkout: создайте индивидуальную комиссию, если товары из разных категорий - PullRequest
0 голосов
/ 27 июня 2019

СЦЕНАРИЙ:

Мы являемся онлайн-службой доставки мульти-ресторанов:

И нам нужно добавить дополнительную плату, если клиент заказывает из 2 или более различных ресторанов.Таким образом, для каждого ресторана мы добавляем дополнительную плату в размере 2 евро.

ПРИМЕРЫ:

  • клиент выбирает 1 блюдо: без комиссии
  • клиент выбирает 2 блюда из того же ресторана:без комиссии
  • клиент выбирает 2 блюда из 2 различных ресторанов: 2 € за дополнительную плату
  • клиент выбирает 3 блюда из 3 различных ресторанов: 2 € + 2 € = 4 €
  • клиент выбирает 4 блюда из 4 различных ресторанов: 2 € + 2 € + 2 € = 6 € ... и т. д.

КАТЕГОРИИ:

  • В каждом ресторане 1категория
  • Каждый прием пищи имеет более 1 категории И
  • Нам необходимо проверить, является ли эта категория, в частности, одинаковой или разной для каждого приема пищи при оформлении заказа в корзине

ПРОБЛЕМА:

Вот, что мы думаем, может сработать:

  • Возможно, нам придется прокручивать каждую еду (продукт) при оформлении заказа в корзине И
  • Мы должны получить категориидля каждого приема пищи И
  • Сравните каждое блюдо + проверьте, принадлежат ли они разным ресторанам

Рестораны подкатегории, такие как:

Город (топ кошка) -> Ресторан (ребенок кошка) -> Питание (продукт)

РЕШЕНИЕ:

Итак, мы думаем, что может быть легко написать код, который проверяет, принадлежат ли продукты (блюда) на кассе из более чем 1 категории (ресторан)?А затем применить дополнительную плату?

Нужна помощь, чтобы лучше понять этот сценарий.Спасибо!

1 Ответ

0 голосов
/ 27 июня 2019

Для этого добавьте следующий фрагмент кода в функции вашей активной темы. Php -

function woo_add_cart_fee() {
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();
    $restaurant = array();
    foreach($items as $item => $values) { 
        $available_restaurant_cat_ids = array(); // Replace the empty array with all avaiable 'restaurants' categories ids
        $restaurant_list_ids = wp_get_post_terms($values['data']->get_id(),'product_cat',array('fields'=>'ids')); // we assumed that restaurant belongs to product_cat
        if($restaurant_list_ids){
            foreach ($restaurant_list_ids as $id) {
                if(!in_array($id, $available_restaurant_cat_ids)) continue; // id not belongs to restaurant
                if(!in_array($id, $restaurant)){
                    $restaurant[] = $id;
                }
            }
        }
    } 
    $restaurant_multiply = count($restaurant) - 1; // first restaurant id free
    $extra_fee = 2; // 2 euro

    $woocommerce->cart->add_fee( __('Extra fees', 'woocommerce'), $extra_fee*$restaurant_multiply );

}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...