Скрыть способы доставки для определенных классов доставки в WooCommerce

В WooCommerce я скрываю способы доставки, основанные на разных классах доставки в корзине, используя "Скрыть методы доставки для определенного класса доставки в WooCommerce" код ответа (второй способ), но проблема в том, что я использую Плагин WPML, который управляет сайтом на двух языках, поэтому поиск только одного класса не поможет.

Поэтому мне нужно обрабатывать 2 класса доставки вместо одного. Я попробовал добавить два класса доставки таким образом:

// HERE define your shipping classes to find
$class = 3031, 3032;

Но это ломает сайт. Поэтому я хотел бы скрыть установленную фиксированную ставку не только для обоих классов доставки 3031 и 3032.

Что я делаю не так? Как я могу включить 2 класса доставки, не нарушая работу веб-сайта?


person user3158006    schedule 01.06.2019    source источник


Ответы (1)


Чтобы использовать несколько классов доставки, вы должны сначала определить их в массиве, а в операторе IF использовать условную функцию in_array() следующим образом:

add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // HERE define your shipping classes to find
    $classes = [3031, 3032];

    // HERE define the shipping methods you want to hide
    $method_key_ids = array('flat_rate:189');

    // Checking in cart items
    foreach( $package['contents'] as $item ) {
        // If we find one of the shipping classes
        if( in_array( $item['data']->get_shipping_class_id(), $classes ) ){
            foreach( $method_key_ids as $method_key_id ){
                unset($rates[$method_key_id]); // Remove the targeted methods
            }
            break; // Stop the loop
        }
    }
    return $rates;
}

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

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

Связанная тема: Скрыть способы доставки для определенного класса доставки в WooCommerce

person LoicTheAztec    schedule 01.06.2019
comment
Спасибо, сэр. Работает как шарм. Я очень рад сделать пожертвование на ваш счет PayPal =) - person user3158006; 01.06.2019