• Resuelto charlie0412

    (@charlie0412)


    Un saludo para todos los colegas del foro, en mi tienda tengo definidos varios métodos de envío con sus respectivas tarifas, entre ellos, he creado algunos denominados «express» por si el cliente quiere una entrega más rápida, quisiera saber si pueden ayudarme con algún código que oculte o deshabilite estos métodos de envío según ciertos horarios, por ejemplo, no deberían estar disponibles a partir de las 3 de la tarde ni los fines de semana, los IDs de los métodos en cuestión son los siguientes: advanced_flat_rate_shipping:12959, advanced_flat_rate_shipping:12945, advanced_flat_rate_shipping:12947, advanced_flat_rate_shipping:12956.

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • 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)?

    Iniciador del debate charlie0412

    (@charlie0412)

    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.
    Iniciador del debate charlie0412

    (@charlie0412)

    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!

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Deshabilitar método de envío según horario’ está cerrado a nuevas respuestas.