【问题标题】:Shipping methods only enabled in checkout page on Woocommerce运输方式仅在 Woocommerce 的结帐页面中启用
【发布时间】:2019-05-04 02:00:14
【问题描述】:

在 Woocommerce 上,我们需要从购物车部分中删除运输方式,然后仅将其添加到结帐页面。

真的应该感谢任何跟踪或帮助吗?

【问题讨论】:

    标签: php woocommerce cart checkout shipping-method


    【解决方案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";}
            )
    )
    

    没有运输包装......

    对于之前已经购买过东西的客户,它只会保留以前的运输方式和以前选择的运输方式。

    【讨论】:

    • 谢谢,帮了大忙。啊啊啊!如果您使用的是 Germanized,则有一个复选框。取消选中它,您就可以在结帐时看到运输方式。谢谢
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多