Mostrar mensaje al elegir un método de envío en Woocommerce

Por defecto Woocommerce te deja poner un mensaje cuando seleccionamos un método de pago, pero no ocurre igual con los envíos. Aquí también es importante poner un mensaje sobretodo indicando el tiempo de envío, si lleva seguimiento o si es recogida en local indicar el lugar.

Así que en este artículo vamos a ver cómo implementarlo sin ningún plugin, con un simple código que modificaremos lo vamos a conseguir. Si no sabes cómo añadirlo aquí tienes un tutorial.

Abrir una notificación al seleccionar el envío

El primer ejemplo vamos a establecer que seleccionando el envío por MRW va a salir un mensaje diciendo cuando se aplican las 24 horas. En el functions.php de nuestra plantilla o bien con Code Snippets insertamos el siguiente código:

add_action( 'woocommerce_cart_totals_after_shipping' , 'dl_abrir_mensaje_seleccionando_envio' );
add_action( 'woocommerce_review_order_after_shipping' , 'dl_abrir_mensaje_seleccionando_envio' );

function dl_abrir_mensaje_seleccionando_envio() {
		$chosen_method    = WC()->session->get( 'chosen_shipping_methods' );
		$chosen_method     = explode(':', reset($chosen_method) );

		if ( $chosen_method[0] == 'mrw' ){ //Aquí el metodo de envío
		    echo '<tr class="dl-msj-envio"><td colspan="2" style="text-align:center;background:#e0e0e0;">
 //Cambiar estilos en linea
	            	<strong>Lo recibirás mañana si lo pides antes de las 17:00!</strong> //Cambia tu mensaje
	            </td></tr>';			
		}
}
woocommerce poder escribir mensaje seleccionando transporte

Dentro del snippet os digo dónde podéis cambiar el contenido, vamos con otro ejemplo, pero con recogida en tienda, avisando de dónde estamos:

add_action( 'woocommerce_cart_totals_after_shipping' , 'dl_abrir_mensaje_seleccionando_envio' );
add_action( 'woocommerce_review_order_after_shipping' , 'dl_abrir_mensaje_seleccionando_envio' );

function dl_abrir_mensaje_seleccionando_envio() {
		$chosen_method    = WC()->session->get( 'chosen_shipping_methods' );
		$chosen_method     = explode(':', reset($chosen_method) );
			
		if ( $chosen_method[0] == 'local_pickup' ){
		    echo '<tr class="dl-msj-envio-2">
	            <td colspan="2" style="text-align:center;background:#e0e0e0;">
	            	<strong>Contacta <a href="https://diegol.top/contactar/>aquí</a> para saber más.</strong>
	            </td>
	        </tr>';		
		}
}

¿Cómo saber el código de la URL de envío?

Muchos os preguntaréis: yo tengo Nacex, uso un plugin externo para los envíos y no se que código poner. Si sabéis algo de código lo podréis detectar fácilmente. En la zona de métodos de envío le damos clic a inspeccionar y en la zona del método en value esa es la palabra que tienes que copiar:

mostrar una notificacion al seleccionar envío woocommerce

Con esto tenemos para hacer un mensaje en las formas de envío que queramos. Cualquier duda estoy en soporte y si necesitáis aplicar este u otros tutoriales personalizados en vuestra tienda virtual todo está incluido en mis servicios de mantenimiento en Woocommerce

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Especialista en Comercio electrónico con Woocommerce. Te ayudo a crear, gestionar y publicitar tu Ecommerce en función de tu sector y público objetivo. Puedes encontrarme en Diegol.top

¿Necesitas ayuda con este tutorial? Mándame un correo y te resuelvo todas las dudas!


Ver servicios Contactar

También puedes suscribirte a mi newsletter para no perderte ninguna novedad

Reader Interactions

comentarios

  1. Daniel says

    Hola,

    ¿Se pueden crear diferentes snippets para diferentes métodos de envió? Estoy intentándolo pero me da error al crear otro snippet:

    El fragmento de código ha sido desactivado debido a un error en la línea 5:

    No se puede redeclarar la función dl_abrir_mensaje_seleccionando_envio.

    Línea 5:

    $chosen_method = WC()->session->get( ‘chosen_shipping_methods’ );

    Y por defecto la url del método de envío es «free_shipping:3» y no la detecta tengo q eliminar «:3» y dejarlo «free_shipping» para q la detecte. Hay otro metodo de envío q no lo detecta de ninguna manera «flat_rated:10», ni siquiera «flat_rated»…

    A ver si me puedes ayudar y gracias!

    • Diegol says

      Hola Daniel,

      No puedes crear otro snippet con el mismo nombre de la función, puedes modificar el de la copia dl_abrir_mensaje_seleccionando_envio_2 añadiendo un «_2» o cualquier cosa.

      Igualmente no hace falta que crees otra función, con que dupliques a partir del condifional—> if ( $chosen_method[0] == ‘free_shipping:3’ ){

      Así no te hará falta crear otra y te sirve la misma función. Si te sigue dando error coméntame.

      Un saludo!

  2. Daniel says

    Muchas gracias por la respuesta!

    Así está bien?

    add_action( ‘woocommerce_cart_totals_after_shipping’ , ‘dl_abrir_mensaje_seleccionando_envio’ );
    add_action( ‘woocommerce_review_order_after_shipping’ , ‘dl_abrir_mensaje_seleccionando_envio’ );

    function dl_abrir_mensaje_seleccionando_envio() {
    $chosen_method = WC()->session->get( ‘chosen_shipping_methods’ );
    $chosen_method = explode(‘:’, reset($chosen_method) );

    if ( $chosen_method[0] == ‘free_shipping’ ){ //Aquí el metodo de envío
    echo ‘
    Recibe tu compra en casa de lunes a domingo de 7-23hs
    ‘;
    }

    if ( $chosen_method[0] == ‘local_pickup’ ){ //Aquí el metodo de envío
    echo ‘
    Recoje tu compra en tienda de lunes a domingo de 7-23hs
    ‘;
    }

    if ( $chosen_method[0] == ‘flat_rate’ ){ //Aquí el metodo de envío
    echo ‘
    Tu compra en tienda de lunes a domingo de 7-23hs
    ‘;
    }
    }

    Las URL de cada método de envío son así: ‘free_shipping:1’, ‘local_pickup:2’ y ‘flat_rated:9’ y para que funcione debo escribirlas sin el ‘:1’

    Los números creo que se deben a que tengo creado varios metodos de envío iguales (Envio Gratuito, Recogida Local y Precio Fijo) para distintas zonas.

    Sabes como podría reconocerlo con el número ‘:1’ ??

    Un saludo y gracias

  3. Daniel says

    Lo estoy probando, tiene buena pinta lo único q para los envios con Precio Fijo el coste que añado no es un cantidad fija, si no un porcentaje del 30% [fee percent=»30″] y en este plugin hay q añadir una catidad excata en €

    Otra pregunta relacionada con los metedos de envío. ¿Sabrías ocultar un método de envío Precio Fijo si no llega hasta cierta cantidad, por ejemplo 40€?

    Un saludo y gracias 😉

    • Diegol says

      En porcentaje ya la versión premium jajaja
      Respecto a lo que mencionas el mismo plugin lo permite pones de rango de 40 a infinito un precio y ya está, para uno más bajo no sale.
      Un saludo!

  4. Misha says

    Hola, he modificado una linea de codigo
    $chosen_method = explode(‘.’, reset($chosen_method) );

    de este modo puedes poner if ( $chosen_method[0] == ‘table_rate:4:1’ ) tal cual como en html. Ami funciona de maravilla.

  5. Misha says

    Hola Diego, realmente mejor es quitar la linea
    // $chosen_method = explode(‘:’, reset($chosen_method) );

    Y ya funciona todo sin tener que filtrar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *