Disable shipping method by time range in WooCommerce

Disable shipping method by time range in WooCommerce.

Snippet Type

Execute on Child Sites

Snippet


If you want to show the shipping method from 7 pm Monday to Friday and hide it at other times, you need to adjust your code to reflect this logic. Here's an updated version of your code:

 add_filter( 'woocommerce_package_rates', 'disable_shipping_method_based_on_day_and_time', 10, 2 );

function disable_shipping_method_based_on_day_and_time( $rates, $package ) {
    // Set the default timezone (http://php.net/manual/en/timezones.php)
    date_default_timezone_set( 'Europe/Madrid' );

    // Set the shipping rate IDs
    $shipping_rate_ids = array( 
        'advanced_flat_rate_shipping:12945',
        'advanced_flat_rate_shipping:12947',
        'advanced_flat_rate_shipping:12956',
        'advanced_flat_rate_shipping:12959',
    );

    foreach ( $shipping_rate_ids as $shipping_rate_id ) {
        // If the shipping rate ID is in the array and it is Monday to Friday and (before 3:00 pm or after 7:00 pm)...
        if ( array_key_exists( $shipping_rate_id, $rates ) 
            && ( date( 'N' ) >= 1 && date( 'N' ) <= 5 ) // Monday to Friday
            && ( date( 'H' ) < 15 || date( 'H' ) >= 19 ) ) { // Before 3:00 pm or after 7:00 pm
            // Enable the shipping method.
            continue;
        } 
        // If it is Saturday or Sunday...
        elseif ( array_key_exists( $shipping_rate_id, $rates ) 
            && ( date( 'N' ) == 6 || date( 'N' ) == 7 ) ) { // Saturday or Sunday
            // Disable the shipping method.
            unset( $rates[$shipping_rate_id] );
        }
    }

    return $rates;
}

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.