Рубрики
Woocommerce

Очищаем кэш методов доставки в Woocommerce

Бывает, что нужно программно убрать один или несколько способов доставки со страницы оформления заказа. Вроде ничего сложного. Ниже — небольшой кусок кода, который это делает. Туда можно добавить разнообразные условия и т.п.

add_filter( 'woocommerce_package_rates', 'remove_shipping_methods', 10, 2 );
function remove_shipping_methods( $rates, $package ) {
   unset( $rates['flat_rate:2'] ); 
   return $rates;
}

Но после того, как вы добавили этот код в functions.php вашей темы, чтобы протестировать код, вам придётся очистить кэш способов доставки.

Можно сделать это вручную, зайдя в настройки способов доставки Woocommerce — нужно будет временно отключить один из способов доставки, затем включить его обратно. Но нам этот метод не подходит — кэш нужно обновить программно, без блуждания по меню админки.

Вот два способа решения этой проблемы:

1. от harisrozak

add_filter('woocommerce_checkout_update_order_review', 'clear_wc_shipping_rates_cache');

function clear_wc_shipping_rates_cache(){
    $packages = WC()->cart->get_shipping_packages();

    foreach ($packages as $key => $value) {
        $shipping_session = "shipping_for_package_$key";

        unset(WC()->session->$shipping_session);
    }
}

2. от laurikar

add_action('woocommerce_checkout_update_order_review', 'clear_wc_shipping_rates_cache');
function clear_wc_shipping_rates_cache(){
    WC_Cache_Helper::get_transient_version( 'shipping', true );
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *