在 WooCommerce 中将 "free shipping" 方法设置为选定的默认送货选项

Set "free shipping" method as selected default shipping option in WooCommerce

我正在努力更改默认选择的送货选项。 'Free shipping' 送货选项仅在客户购物车中的金额超过 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 );
    }
}

我想到了这个片段 here

提前致谢!!

您的代码有一些错误

  • 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 );