Отключить только фиксированный метод доставки, если в Woocommerce доступна бесплатная доставка - PullRequest
0 голосов
/ 04 января 2019

Я использую Скрыть конкретные тарифы, когда в WooCommerce доступна бесплатная доставка. 3 слегка изменил код ответа, чтобы скрыть все способы доставки, кроме одного. Единственный способ, который я хочу показать - это тариф из плагина "Woocommerce Advanced Shipping" .

Я использую правильный ID ставки и т. Д. *

Все работает нормально, кроме случаев, когда клиент пытается выбрать этот способ доставки, он не останется выбранным. Он просто возвращается к бесплатной доставке.

Я попробовал отладку, а также попробовал код с собственным идентификатором единой ставки woocommerce, и он обнаружился / смог выбрать его просто отлично.

add_filter( 'woocommerce_package_rates', 'conditionally_hide_shipping_methods', 100, 2 );
function conditionally_hide_shipping_methods( $rates, $package ) {

    $flat_rates_express = array( '2588' );

    $free = $flat2 = array();
    foreach ( $rates as $rate_key => $rate ) {
        // Updated Here To 
        if ( in_array( $rate->id, $flat_rates_express ) )
            $flat2[ $rate_key ] = $rate;
        if ( 'free_shipping:12' === $rate->id )
            $free[ $rate_key ] = $rate;
    }
        return ! empty( $free ) ? array_merge( $free, $flat2 ) : $rates;
}

ID, который я хочу сохранить: "2588" (пользовательский тариф доставки из плагина)

Как отключить метод доставки по фиксированной ставке, когда доступна бесплатная доставка o, и сохранить пользовательский тариф доставки (из плагина)?

1 Ответ

0 голосов
/ 05 января 2019

Поскольку у вас есть 3 способа доставки, 1 бесплатная доставка, 1 фиксированная ставка и 1 пользовательский «2588», можно скрыть фиксированный метод доставки, если вместо этого доступна бесплатная доставка:

add_filter( 'woocommerce_package_rates', 'free_shipping_disable_flat_rate', 1000, 2 );
function free_shipping_disable_flat_rate( $rates, $package ) {
    // Here your free shipping rate Id
    $free_shipping_rate_id = 'free_shipping:12';

    // When your Free shipping method is available
    if ( array_key_exists( $free_shipping_rate_id, $rates ) ) {
        // Loop through shipping methods rates
        foreach ( $rates as $rate_key => $rate ) {
            // Removing "Flat rate" shipping method
            if ( 'flat_rate' === $rate->method_id ){
                unset($rates[$rate_key]);
            }
        }
    }
    return $rates;
}

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

Обновите кэши доставки:
1) Этот код уже сохранен в вашем файле function.php.
2) В настройках зоны доставки отключите / сохраните любой способ доставки, затем включите обратно / сохранить.
Вы сделали , и вы можете проверить это.

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