Изменить класс доставки на основе количества классов доставки в Woocommerce - PullRequest
0 голосов
/ 14 сентября 2018

У меня проблемы со стандартными настройками класса доставки WooCommerce. У нас есть небольшой интернет-магазин с двумя затратами на доставку. Один для продуктов, которые помещаются в почтовый ящик, а другой - нет.

Мы хотели бы установить, что если есть 2 продукта с классом доставки по почтовому ящику, то цена становится ценой пакета.

Теперь по умолчанию WooCommerce взимает только 1-кратный класс доставки почтовых ящиков.

1 Ответ

0 голосов
/ 14 сентября 2018

Сначала вам нужно будет настроить параметры доставки, как показано на экране ниже, для метода доставки «Единый тариф» и только для одного класса доставки с именем «Почтовый ящик» (установка желаемых сумм для «Почтового ящика» или класса отсутствия доставки). )

enter image description here

Таким образом, некоторые из ваших продуктов будут иметь класс доставки «Почтовый ящик», а все остальные - нет. Продукты без класса доставки (без класса доставки) будет вашей "посылкой".

Следующий код удалит класс доставки элементов корзины, если имеется более одного элемента с классом доставки «Почтовый ящик»:

// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_class', 30, 1 );
function change_change_shipping_class( $cart ) {
    if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE define your shipping class SLUG
    $mailbox_shipping_class = 'mailbox';

    $mailbox_count = 0;

    // 1st cart item Loop: Counting "mailbox" shipping classes cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Set the new price
        if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ) {
            $mailbox_count += $cart_item['quantity'];
        }
    }

    // If there is more than one item we continue
    if( $mailbox_count <= 1 )
        return; // Exit

    // 2nd cart item Loop: Reset the cart items with shipping class "mailbox"
    foreach ( $cart->get_cart() as $cart_item ) {
        if(  $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ){
            $cart_item['data']->set_shipping_class_id('0');
        }
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...