Añadir contenido a los Emails de WooCommerce

LucusHost, el mejor hosting

Normalmente no modificamos los mails prediseñados de WooCommerce, pero lo cierto es que conviene modificarlos y no solo el estilo, sino añadirle funcionalidades cómo por ejemplo que muestre los número de seguimiento del pedido.

En este tutorial vamos a ver cómo añadir una función a cada correo, y cuales son las mejores funcionalidades que podemos añadir, todo sin plugins, solo a código.

Formas de modificar los emails en WooCommerce

Existen 3 formas diferentes en las que podemos cambiar las plantillas de correo electrónico de WooCommerce. Estas nos permiten modificar diferentes aspectos de las plantillas de correo electrónico. Las 3 se pueden combinar para formar un resultado único:

  • La configuración de los mails: Es todo lo que podemos cambiar entorno a la plantilla de correo desde el mismo WooCommerce, ya sean colores, textos predefinidos, si enviarlos o no… Esto tiene muy poca personalización.
  • Cambiar las plantillas de los correos manualmente: En cada tipo de correo podemos modificarlos desde la plantilla, no recomiendo esto, puesto que cada vez que actualicemos el WooCommerce se pierden los cambios.
  • Hooks o Ganchos: Esto es lo que vamos a aprender en este tutorial. Consiste en añadir contenido a ciertas zonas del mail sin cambiar la configuración del mail. Esto es lo más efectivo, ya que aunque actualicemos el WooCommerce los cambios se mantienen.

Además puede leer shortcodes de WooCommerce para automatizar aún mas el proceso.

Tipos de correos en WooCommerce

Lo primero de todo vamos a identificar todos los correos que mandamos al usuario desde nuestro WooCommerce. En este caso los encontraremos en WooCommerce > Ajustes > Correos electrónicos. Estos son todos los que puede recibir el cliente si están activos:

tipos de correos que manda woocommerce
tipos de correos que manda woocommerce

Y estas son las ID´s de cada uno que modificaremos en el propio correo, están en el mismo orden que la anterior imagen:

if ( $email->id == 'customer_on_hold_order' ) {}
if ( $email->id == 'customer_processing_order' ) {}
if ( $email->id == 'customer_completed_order' ) {}
if ( $email->id == 'customer_refunded_order' ) {}
if ( $email->id == 'customer_invoice' ) {}
if ( $email->id == 'customer_note' ) {}
if ( $email->id == 'customer_reset_password' ) {}
if ( $email->id == 'customer_new_account' ) {}

Identificar el lugar dónde lo vamos a añadir

WooCommerce posee hooks o zonas dónde se puede añadir el contenido en sus propios emails, en este caso son:

add_action( 'woocommerce_email_header', array( $object, 'email_header' ) );
add_action( 'woocommerce_email_footer', array( $object, 'email_footer' ) );
add_action( 'woocommerce_email_order_details', array( $object, 'order_details' ), 10, 4 );
add_action( 'woocommerce_email_order_details', array( $object, 'order_schema_markup' ), 20, 4 );
add_action( 'woocommerce_email_order_meta', array( $object, 'order_meta' ), 10, 3 );
add_action( 'woocommerce_email_customer_details', array( $object, 'customer_details' ), 10, 3 );
add_action( 'woocommerce_email_customer_details', array( $object, 'email_addresses' ), 20, 3 );

Os dejo un par de capturas para que podáis identificar estas zonas más fácilmente en el correo:

hooks en los correos de woocommerce
ganchos php email woocommerce

Añadir contenido al email

En este ejemplo vamos a informar en el correo de procesando con un texto, que debido a que estamos de vacaciones en la empresa los pedidos se enviarán a partir de la semana que viene, por lo que tendríamos que añadir el siguiente código:

add_action( 'woocommerce_email_before_order_table', 'dl_añadir_contenido_email_woo', 30, 4 ); // En este caso decimos que el cotenido esté antes de la tabla.
  
function dl_añadir_contenido_email_woo( $order, $sent_to_admin, $plain_text, $email ) {
   if ( $email->id == 'customer_processing_order' ) { //Aqui ponemos el ID del correo que queremos modificar
      echo '<p>Debido a que estamos de vacaiones esta semana en mitiendaonline.com lo pedidos serán procesados a la siguiente semana. Lamentamos las molestias</p>'; // Entre las dos p modificamos el mensaje que queremos mostrar
   }
}

Y nos quedaría un resultado en el mail tal que así:

Insertar texto extra en los emails de woocommerce

Otro ejemplo: Valóranos en Google Business

En este caso vamos a añadir el enlace de Google My Business para que nos valore una vez hemos completado el pedido para mejorar nuestro SEO y autoridad de marca. Este caso es un complemento a las notificaciones automáticas de valoraciones que explicaba aquí.

add_action( 'woocommerce_email_customer_details', 'dl_añadir_contenido_email_woo_2', 30, 4 ); // Después de la tabla de contenido
  
function dl_añadir_contenido_email_woo_2( $order, $sent_to_admin, $plain_text, $email ) {
   if ( $email->id == 'customer_completed_order' ) { //Aqui ponemos el ID del correo completado
      echo '<p>Estaríamos muy agradecidos que nos valorases como tienda en Google en este enlace</p>'; // Entre las dos p modificamos el mensaje que queremos mostrar
   }
}

Resumen y Resolución

Añadir este tipo de contenido de forma automática en los correos electrónicos te ayudará a conseguir aquello que necesites: conectar más con el cliente, generar confianza, tener más valoraciones, poder seguir el pedido…

Si queréis dar un repaso por los ajustes básicos por si hay algo que se os escapa o queréis hacer esto mismo con un plugin, pasaros por este post.

Cualquier duda que necesitéis estoy en comentarios. Añadir que en los desarrollos de WooCommerce que hago estas modificaciones van incluidas!

¡Haz clic para puntuar esta entrada!
(Votos: 6 Promedio: 5)
mailerlite diegol

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 Curso de WooCommerce

También puedes realizar una donacion para seguir apoyando la salida de nuevos tutoriales y actualizaciones

mailerlite diegol

Reader Interactions

comentarios

  1. Ferran says

    Hola Diego!

    Muchas gracias por el tutorial, justo me encuentro con esta problemática y me resulta muy interesante. El único problema que le veo aparece en una instalación multilingüe. ¿Cómo añado contenido en dos idiomas si estoy inyectando el código en un solo idioma?

    ¡Muchas gracias!

    • Diegol says

      Hola Ferran,

      Depende de que sistema multilingüe estés usando. Yo lo uso en multilingual press y lo creo en cada subcarpeta con la traducción.

      Un saludo!

    • Diegol says

      Hola Misha,

      Se puede personalizar cualquier cosa en WooCommerce. Tanto el correo de pedido completado, procesando, etc. Como si eliges un transportista concreto te salga un correo diferente por seleccionar ese.

      Un saludo!

  2. Jesus says

    hola amigo como puedo quitar el campo cantidad de los correos de woocommerce? gracias por tan preciada informacion. saludos!

  3. Joel says

    Hola Diego, muchas gracias por este post tan completo.

    Por otra parte, sabes si existe algún plugin que realice esto de forma más «sencilla» o «automática». Voy a tratar de personalizar los mails de la tienda con tu método, pero igualmente me gustaría conocer si existe alguna alternativa con un plugin.

    Saludos y gracias,

    Joel

  4. christian castro says

    Hola diego, me gustó tu post, pero tengo una duda, quiero quitar el campo «precio» , estoy usando esta función en el functions.php:

    function adjust_woocommerce_get_order_item_totals( $totals ) {
    unset($totals[‘cart_subtotal’] );
    return $totals;
    }

    Esta función elimina el campo subtotal de la tabla, pero no hayo la manera de eliminar la columna del precio.
    Si me pudieras ayudar, estaría muy agradecido

    • Diegol says

      Hola Christian,

      Puedes probar a eliminarlo mediante CSS:

      function dl_ocultar_columna_de_precios_email()
      {
      ?>

      • christian castro says

        Pero con ¿Si se modifica el Css de la tabla, aplica a la platilla de correo que le llega al cliente cuando realiza una compra?.
        El código anterior es para el correo que le llega al cliente.

        function adjust_woocommerce_get_order_item_totals( $totals ) {
        unset($totals[‘cart_subtotal’] );}
        unset($totals[‘*********’] ); **** -> Aquí es donde me falta un parámetro de la tabla (el de la columna precio).
        return $totals;
        }

Deja una respuesta

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