Getting minimum order amount for 'Free Shipping' method in checkout page

前端 未结 5 1716
醉话见心
醉话见心 2021-01-06 02:42

I have did tried to use the code from this answer:
How to get minimum order amount for free shipping in woocommerce

But it return a NULL

相关标签:
5条回答
  • 2021-01-06 02:58

    Right way for get this..

    function get_free_shipping_minimum($zone_name = 'England') {
        if ( ! isset( $zone_name ) ) return null;
    
        $result = null;
        $zone = null;
    
        $zones = WC_Shipping_Zones::get_zones();
        foreach ( $zones as $z ) {
            if ( $z['zone_name'] == $zone_name ) {
                $zone = $z;
            }
        }
    
        if ( $zone ) {
            $shipping_methods_nl = $zone['shipping_methods'];
            $free_shipping_method = null;
            foreach ( $shipping_methods_nl as $method ) {
                if ( $method->id == 'free_shipping' ) {
                    $free_shipping_method = $method;
                    break;
                }
            }
    
            if ( $free_shipping_method ) {
                $result = $free_shipping_method->min_amount;
            }
        }
    
        return $result;
    }
    
    0 讨论(0)
  • 2021-01-06 03:01

    These 2 filters allow you to get the minimum order amount or even to change its value:

    • woocommerce_shipping_free_shipping_instance_option
    • woocommerce_shipping_free_shipping_option

    You could use it like this for example:

    add_filter( 'woocommerce_shipping_free_shipping_instance_option', 'get_free_shipping_min_amount', 10, 3 );
    add_filter( 'woocommerce_shipping_free_shipping_option', 'get_free_shipping_min_amount', 10, 3 );
    function get_free_shipping_min_amount( $option, $key, $method ){
        if (
            'min_amount' !== $key ||
            ! is_numeric( $option )     
        ) {
            return $option;
        }
        // Minimum amount
        $min_amount = $option;
        return $option;
    }
    

    You can get more info from the shipping method using the $method param like instance_id or something like that if you wish.

    You can also replace 'free_shipping' from the hook to get info from other shipping methods. The hook works like this: 'woocommerce_shipping_' . $shipping_method_id . '_option'.

    You can take a look at it on the documentation:

    • https://docs.woocommerce.com/wc-apidocs/source-class-WC_Shipping_Method.html#469
    • https://docs.woocommerce.com/wc-apidocs/source-class-WC_Shipping_Method.html#495
    0 讨论(0)
  • 2021-01-06 03:05

    The code of this answer: How to get minimum order amount for free shipping in woocommerce
    is obsolete with WooCommerce version 2.6+, but it was helpful for this functional answer…

    After making some search and some tries, I have found the way to get the minimum Order amount that is set in the Free Shipping method, for a specific Zone (Region):

    Here is the working tested code (explanations are commented inside):

    // Here you get (as you already know) the used shipping method reference
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    
    // Replacing inside the string ':' by '_'
    $option_value = str_replace(':', '_', $chosen_methods[0]);
    
    // We concatenate the string with additional sub-strings
    $option_value = 'woocommerce_'.$option_value.'_settings';
    
    // Just a test => outputting the string to see what we get
    echo $option_value; echo '<br>';
    
    // Now we can get the options values with that formatted string
    $free_shipping_settings = get_option( $option_value );
    
    // Just for test => we output the (pre-formatted) array of values to check
    echo '<pre>'; print_r($free_shipping_settings); echo '</pre><br>'; 
    
    // Here we get the value of the order min amount (Finally!)
    $order_min_amount = $free_shipping_settings['min_amount'];
    
    // We output the value (to check)
    echo 'Order min amount: '.$order_min_amount;
    

    Bingo! you get it.

    0 讨论(0)
  • 2021-01-06 03:08

    You need to get the option by getting ,

    get_option( 'woocommerce_free_shipping_1_settings' ); 
    

    And then unserialize the data by doing ,

    maybe_unserialize();
    
    0 讨论(0)
  • 2021-01-06 03:20

    Maybe it will help someone. You can create new free shipping object and get from it min_amount. I think it's simpler than in @LoicTheAztec answer.

    if ( class_exists( 'WC_Shipping_Free_Shipping' ) ) {
        $free_shipping = new WC_Shipping_Free_Shipping();
        $min_amount = $free_shipping->min_amount;
        echo $min_amount;
    }
    
    0 讨论(0)
提交回复
热议问题