仅在 Woocommerce 的结帐页面中启用送货方式
Shipping methods only enabled in checkout page on Woocommerce
在 Woocommerce 上,我们需要从购物车部分删除送货方式,仅将其添加到结帐页面。
真的很感激任何曲目或帮助吗?
根据 "why?" 和 "for what?" 的不同,将有多种方法可以做到这一点:
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 文件。测试和工作。
But it will not remove the shipping methods (or shipping packages) from session…
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 文件。测试和工作。
It will remove all shipping methods and all shipping packages from cart and WC_Session
.
The related registered WC_Session
data will be something like:
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";}
)
)
without shipping package…
It will only keep the previous shipping methods and the previous chosen shipping method for customers that have already purchased something before.
在 Woocommerce 上,我们需要从购物车部分删除送货方式,仅将其添加到结帐页面。
真的很感激任何曲目或帮助吗?
根据 "why?" 和 "for what?" 的不同,将有多种方法可以做到这一点:
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 文件。测试和工作。
But it will not remove the shipping methods (or shipping packages) from session…
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 文件。测试和工作。
It will remove all shipping methods and all shipping packages from cart and
WC_Session
.The related registered
WC_Session
data will be something like: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";} ) )
without shipping package…
It will only keep the previous shipping methods and the previous chosen shipping method for customers that have already purchased something before.