将“免费送货”设置为WooCommerce中默认的选中运输选项

4
我在更改默认选定的运输选项方面遇到了困难。如果购物车中的金额低于$70,则“免费送货”运输选项将不会出现在运输选项中。只有当购物车中的金额超过$70时,该运输选项才会显示。
如果客户购物车中的金额达到$70或更高,则“免费送货”选项将显示并且应该成为默认选定的运输选项。
我尝试添加以下代码片段,但它似乎对我没有效果,或者修改ID时可能存在错误(不确定)。
add_action( 'woocommerce_before_cart', 'set_default_chosen_shipping_method', 5 );
function set_default_chosen_shipping_method(){
    //
    if( count( WC()->session->get('shipping_method_0')['rates'] ) > 0 ){
        foreach( WC()->session->get('shipping_method_0')['rates'] as $rate_id =>$rate)
            if($rate->method_id == 'free_shipping30'){
                $default_rate_id = array( $rate_id );
                break;
            }

        WC()->session->set('chosen_shipping_methods', $default_rate_id );
    }
}

我从这里获得了这个代码片段的灵感。

输入图像描述

输入图像描述

提前谢谢!

WooCommerce带有一个最低购物车价值的免费送货选项。无需编码,它已经内置了。/wp-admin/admin.php?page=wc-settings&tab=shipping > 编辑区域 > 启用免费送货 > 将最低订单金额设置为70。 - Andy Gee
明白了,我已经设置了免费送货并设置了最低订单金额。我面临的唯一问题是,如果客户达到或超过获得免费送货的最低金额,则应自动在运输选项中选择免费送货选项。目前,即使在运输选项中有免费送货选项,它仍会自动选择“一类邮件”运输选项。希望我解释清楚了:D - user6684898
1个回答

5

你的代码包含一些错误

  • WC()->session->get('shipping_method_0')['rates'] 替换为 WC()->session->get( 'shipping_for_package_0')['rates']
  • if($rate->method_id == 'free_shipping30'){ 替换为 if ( $rate->method_id == 'free_shipping' ) {

这样做就可以了:

function action_woocommerce_before_cart() { 
    // NOT empty (get)
    if ( count( WC()->session->get( 'shipping_for_package_0')['rates'] ) > 0 ) {
        // Loop through
        foreach ( WC()->session->get('shipping_for_package_0')['rates'] as $rate_id => $rate ) {            
            // For free shipping
            if ( $rate->method_id == 'free_shipping' ) {
                $default_rate_id = array( $rate_id );
                break;
            }
        }

        // Set
        WC()->session->set( 'chosen_shipping_methods', $default_rate_id );
    }
}
add_action( 'woocommerce_before_cart', 'action_woocommerce_before_cart', 10, 0 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接