Hola, @charlie0412:
El prefijo advanced_flat_rate_shipping
me hace pensar que ya estás usando un plugin para gestionar los envíos.
Si es así, ¿podrías decirme el nombre del plugin y el desarrollador/empresa que lo mantiene (hay varios con nombres parecidos)?
Hola @yordansoares:
Tienes razón, estoy usando el plugin Advanced Flat Rate Shipping For WooCommerce, desarrollado por theDotstore, de ahí viene el prefijo, en la siguiente URL encontré algo parecido a lo que quiero hacer pero no pude adaptarla a mis necesidades debido a mi poca experiencia en programación.
Gracias por proporcionar el nombre del plugin, sin embargo, te comento que, normalmente, no proporcionamos ayuda para plugins que no están en el directorio de plugins WordPress.org.
Dicho esto, como has proporcionado una URL con un ejemplo de código muy parecido a lo que necesitas, lo he reescrito, como cortesía, para que aplique a tu caso específico:
/**
* WooCommerce:
* Desactiva métodos de envío específicos los fines de semana y después de las 3:00 pm / 15:00
*/
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 tarfias 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;
}
Recuerda que tienes que vaciar la caché de los datos de envío:
- Vaciando el carrito y añadiendo un nuevo producto después;
- Desactivando temporalmente un método de envío y guardar los cambios. Luego, reactivarlo y volver a guardar los cambios.
Muchísimas gracias @yordansoares:
Por segunda ocasión me ayuda a resolver un problema, el código funciona perfectamente, una vez más gracias y saludos para todos los colegas del foro.
Gracias por confirmar que ha funcionado, @charlie0412:
¡Te deseo mucho éxito con tu tienda!