仅在Woocommerce的结帐页面中启用了送货方式

时间:2018-12-02 16:55:46

标签: php woocommerce cart checkout shipping-method

在Woocommerce上,我们需要从“购物车”部分中删除送货方式,仅将其添加到“结帐”页面。

任何曲目或帮助都应该受到赞赏吗?

1 个答案:

答案 0 :(得分: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文件中。经过测试和工作。

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";}
        )
)
     

没有运输包装……

     

对于以前已经购买过商品的客户,它将仅保留以前的运输方式和以前选择的运输方式。