Принудительная бесплатная доставка без скрытия всех других вариантов доставки в WooCommerce - PullRequest
1 голос
/ 27 апреля 2019

В Woocommerce мы используем следующий код, чтобы скрыть все способы доставки, кроме бесплатной доставки:

function my_hide_shipping_when_free_is_available( $rates ) {
    $free = array();
    foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' === $rate->method_id ) {
            $free[ $rate_id ] = $rate;
            break;
        }
    }
    return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Теперь мы хотели бы сохранить экспресс-доставку, а также местный пикап. Бесплатная доставка, однако, должна быть предварительно выбрана.

Кто-нибудь знает, как мы можем настроить код?

Наши идентификаторы скорости доставки:

  • Обычная доставка (Versandkosten): legacy_flat_rate
  • Экспресс-доставка (Expressversand) : legacy_flat_rateexpress
  • Бесплатная доставка (Костенлосер Версанд) : legacy_free_shipping
  • Местный пикап (Абхолунг вор Орт) : legacy_local_pickup

1 Ответ

1 голос
/ 28 апреля 2019

Чтобы скрыть только обычную доставку, когда «Бесплатная доставка» доступна, вам понадобится что-то другое:

add_filter( 'woocommerce_package_rates', 'show_hide_shipping_methods', 100 );
function show_hide_shipping_methods( $rates ) {
    // When "Free shipping" is available
    if( isset($rates['legacy_free_shipping']) && isset($rates['legacy_flat_rate']) ) {
        // Hide normal flat rate
        unset($rates['legacy_flat_rate']);
    }
    return $rates;
}

Следующее будет устанавливать «Бесплатная доставка» как по умолчанию выбранная доставкаМетод:

add_filter( 'woocommerce_shipping_chosen_method', 'set_default_chosen_shipping_method', 10, 3 );
function set_default_chosen_shipping_method( $default, $rates, $chosen_method ) {
    if( isset($rates['legacy_free_shipping']) ) {
        $default = 'legacy_free_shipping';
    }
    return $default;
}

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

Обновите кэши доставки: (обязательно)

  1. Этот код уже сохранен на вашем активномфайл theme.php темы.
  2. Корзина пуста
  3. В настройках зоны доставки отключите / сохраните любой способ доставки, затем включите обратно / сохраните.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...