Способы доставки включены только на странице оформления заказа в Woocommerce - PullRequest
0 голосов
/ 02 декабря 2018

В Woocommerce нам нужно удалить методы доставки из раздела Корзина и добавить его только на страницу оформления заказа.

Любой трек или помощь должны быть по-настоящему оценены?

1 Ответ

0 голосов
/ 02 декабря 2018

Будет несколько способов сделать это в зависимости от "почему?"и на "для чего?"вам нужно это:

1) Скрыть доставку, связанную с корзиной - Самый простой способ;

add_filter( 'woocommerce_cart_ready_to_calc_shipping', 'disable_shipping_on_cart' );
add_filter( 'woocommerce_cart_needs_shipping', 'disable_shipping_on_cart' );
function disable_shipping_on_cart( $enabled ){
    return is_checkout() ? true : false;
}

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

enter image description here

Но это не удалит способы доставки (или пакеты доставки) из сеанса…


2) Удалить все способы доставки (и пакеты доставки) везде, кроме страницы оформления заказа:

// Shipping methods
add_filter( 'woocommerce_package_rates', 'keep_shipping_methods_on_checkout', 100, 2 );
function keep_shipping_methods_on_checkout( $rates, $package ) {
    if ( ! is_checkout() ) {
        // Loop through shipping methods rates
        foreach( $rates as $rate_key => $rate ){
            unset($rates[$rate_key]); // Remove
        }
    }
    return $rates;
}

// Shipping packages
add_filter( 'woocommerce_shipping_packages', 'keep_shipping_packages_on_checkout', 20, 1 );
add_filter( 'woocommerce_cart_shipping_packages', 'keep_shipping_packages_on_checkout', 20, 1 );
function keep_shipping_packages_on_checkout( $packages ) {
    if ( ! is_checkout() ) {
        foreach( $packages as $key => $package ) {
            WC()->session->__unset('shipping_for_package_'.$key); // Remove
            unset($packages[$key]); // Remove
        }
    }
    return $packages;
}

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

enter image description here

Будет удалить все способы доставки и все пакеты доставки из корзины и WC_Session.

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

WC_Session_Handler Object
(
    [_data:protected] => Array
        (
            [previous_shipping_methods] => a:1:{i:0;a:3:{i:0;s:16:"free_shipping:10";i:1;s:12:"flat_rate:14";i:2;s:15:"local_pickup:13";}}
            [shipping_method_counts] => a:1:{i:0;i:3;}
            [chosen_shipping_methods] => a:1:{i:0;s:16:"free_shipping:10";}
        )
)

без доставки пакета ...

Он сохранит только предыдущийспособы доставки и предыдущий выбранный способ доставки для клиентов, которые уже приобрели что-либо ранее.

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