如何设置时间范围来禁用送货方式?以下代码有帮助,但我需要设置一个时间来再次显示运送方式:
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点
如果您想在周一至周五晚上 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;
}