Способы доставки включены только на странице оформления заказа в Woocommerce
В Woocommerce нам нужно удалить методы доставки из раздела "Корзина" и добавить их только на страницу оформления заказа.
Любой трек или помощь должны быть по-настоящему оценены?
1 ответ
Там будет несколько способов сделать это в зависимости от "почему?" и на "для чего?" ты нуждаешься в этом:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Но это не удалит методы доставки (или доставки пакетов) из сеанса...
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Это удалит все способы доставки и все пакеты доставки из корзины и
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";} ) )
без доставки пакета…
Он сохранит только предыдущие способы доставки и предыдущий выбранный способ доставки для клиентов, которые уже приобрели что-то ранее.