按时间范围禁用运送方式

问题描述 投票:0回答:1

如何设置时间范围来禁用送货方式?以下代码有帮助,但我需要设置一个时间来再次显示运送方式:

add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_day_of_the_week_and_time', 10, 2 );
function hide_shipping_method_based_on_day_of_the_week_and_time( $rates, $package ) {
    // Establece aquí la zona horaria por defecto (http://php.net/manual/en/timezones.php)
    date_default_timezone_set('Europe/Madrid');
    
    // Establece aquí los ID de las tarifas de envío
    $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 ) {
        // Si el ID de la tarifa de envío está en el array anterior... 
        if ( array_key_exists( $shipping_rate_id, $rates ) 
        // ...y son más de las 3:00 pm (15:00) o es fin de semana...
        && ( ( date( 'H' ) >= 15 || in_array( date( 'N' ), [ 6, 7 ] ) ) ) ) {
            // ...se desactiva la tarifa de envío.
            unset( $rates[$shipping_rate_id] );
        }
    }
    
    return $rates;
}

例如,我需要将送货方式重置为周一至周五晚上7点

woocommerce hook-woocommerce
1个回答
0
投票

如果您想在周一至周五晚上 7 点显示送货方式并在其他时间隐藏它,则需要调整代码以反映此逻辑。这是代码的更新版本:

 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.