WooCommerce 2,6 — Скрыть методы доставки, когда доступна бесплатная доставка
WooCommerce 2,6 приносит значительные изменения в модуль доставки , включая введение судоходства зоны.
Эти изменения нарушают ряд существующих фрагментов , включая фрагмент , чтобы скрыть методы доставки , когда БЕСПЛАТНАЯ ДОСТАВКА доступна.
Это происходит из — за незначительных изменений в пути $rates
массива формируется для способа доставки «Бесплатная доставка». До WooCommerce 2,6, детали способа доставки «Бесплатная доставка» хранится в элементе массива $rates['free_shipping']
. Теперь она хранится в виде , $rates['free_shipping:shipping_zone_instance_id']
где shipping_zone_instance_id
есть доставка зона идентификатор экземпляра метода доставки.
Значит, если идентификатор экземпляра судоходства зоны 1, ключ скорости массива будет free_shipping:1
и если идентификатор экземпляра судоходства зоны 2, то ключ скорости массива будет free_shipping:2
и так далее.
1 2 3 4 5 6 7 8 9 10 11 |
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 ); |
Примечание Если у вас нет ни каких изменений то зайдите Woocommerce-Состояние системы-Инструменты и очистите временные данные.
Чтобы оставить Самовывоз local_pickup используем этот код
1 2 3 4 5 6 7 8 |
add_filter('woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2); function hide_shipping_when_free_is_available($rates, $package) { $free_yn = 0; $pickup_yn = 0; foreach($rates as $key => $value) { $key_part = explode(":", $key); $method_title = $key_part[0]; if ('free_shipping' == $method_title) { |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$free_yn = 1; $free_shipping = $rates[$key]; $free_key = $key; } if ('local_pickup' == $method_title) { $pickup_yn = 1; $local_pickup = $rates[$key]; $pickup_key = $key; } } if ($free_yn == 1) { // Unset all rates. $rates = array(); // Restore free shipping rate. $rates[$free_key] = $free_shipping; if ($pickup_yn == 1) { // Restore local pickup rate. $rates[$pickup_key] = $local_pickup; } return $rates; } return $rates; } |
В примере, порог бесплатной доставки 1000р.
Наконец-то я нашла то, что нужно! Большое вам спасибо, все работает!!!
Вау, спасибо!!! Важно, что еще было пояснение, что необходимо сделать еще одно действие в вуу. Все работает на последнем обновлении вуу! Спасибо и отличного творчества!