将“免费送货”方法设置为 WooCommerce 中选定的默认送货选项

4 php wordpress woocommerce hook-woocommerce shipping-method

我正在努力更改默认选择的运输选项。仅当客户购物车中的金额超过 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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到了这个片段的想法

在此输入图像描述

在此输入图像描述

先感谢您!!

7uc*_*f3r 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 );
Run Code Online (Sandbox Code Playgroud)