Cómo obtener una vista previa de las plantillas de correo electrónico de Woocommerce

5 minutos de lectura

Parece que no puedo encontrar una opción para obtener una vista previa de las diferentes plantillas de correo electrónico de Woocommerce. En la sección de administración de Woocommerce, hay un enlace para obtener una vista previa del correo electrónico “Pedido recibido” para los clientes. Pero me gustaría editar y obtener una vista previa del correo electrónico “Pedido recibido” enviado al administrador.

Probé el complemento de correo electrónico WP Better y los complementos de plantilla de correo electrónico de WP, pero no ofrecían un botón de vista previa para todos los diferentes correos electrónicos de Woocommerce.

La vista previa de las plantillas de correo electrónico mediante la realización de pedidos no es una opción porque hay un retraso de diez minutos entre la realización del pedido y la recepción del correo electrónico del administrador.

avatar de usuario
david riccitelli

Terminé creando una pequeña función que se ejecuta a través del script admin-ajax.php, por ejemplo

https://example.org/wp-admin/admin-ajax.php?action=previewemail&file=emails/customer-processing-order.php&order=180

La función:

  • establece el mundial $order variable al pedido con el id especificado en el order parámetro
  • cargar la plantilla de correo electrónico especificada en el file parámetro.

Este es el código (debe agregarlo en un nuevo complemento o en algún php existente):

/**
 * Open a preview e-mail.
 *
 * @return null
 */
function preview_email()
{
    global $order;

    $filename = $_GET['file'];
    $orderId  = $_GET['order'];

    $order    = new WC_Order($orderId);

    include $filename;

    return null;
}

add_action('wp_ajax_previewemail', 'preview_email');    

  • Buena solución… Modifiqué un poco tu método: también verifica si has iniciado sesión como administrador, agrega el encabezado y el pie de página del correo electrónico (debe ser debido a una actualización de Woocommerce). function previewEmail() { if (is_admin()) { global $order; $sBaseDir = get_template_directory().'/woocommerce/emails/'; $order = new WC_Order($_GET['order']); include $sBaseDir.'email-header.php'; include $sBaseDir.$_GET['file']; include $sBaseDir.'email-footer.php'; } return null; }

    – Sjeiti

    13 de febrero de 2014 a las 17:11


  • @David Riccitelli: ¿qué quiere decir con “algún php existente?” No quiero tener que crear un nuevo complemento solo para esto y no estoy seguro de lo que quiere decir con que puede agregarlo a algunos PHP existentes.

    – thecommonthread

    23/10/2014 a las 21:38

  • @thecommonthread puede agregar lo anterior a cualquier archivo PHP cargado por WordPress (también funcionaría un archivo de tema)

    –David Riccitelli

    26 de octubre de 2014 a las 9:43

  • Tengo un archivo de plantilla que contiene ganchos de woocommerce y algunos otros contenidos. La vista previa muestra el contenido del archivo según el código anterior. Pero los ganchos no se ejecutan. Alguna idea ?

    – Melvin

    9 de noviembre de 2020 a las 14:26


  • si por ganchos te refieres a códigos cortos, puedes almacenar en búfer la salida y luego llamar a do_shortcode (ob_start(); … ob_get_contents(); … ).

    –David Riccitelli

    9 de noviembre de 2020 a las 16:51

Versión modificada de la respuesta anterior usando funciones de woo incorporadas. El beneficio es que se verá tanto en su tema como en la ruta de la plantilla de complementos predeterminada.

/**
 * Open a preview e-mail.
 *
 * @return null
 */
function previewEmail() {

    if (is_admin()) {
        $default_path = WC()->plugin_path() . '/templates/';

        $files = scandir($default_path . 'emails');
        $exclude = array( '.', '..', 'email-header.php', 'email-footer.php','plain' );
        $list = array_diff($files,$exclude);
        ?><form method="get" action="<?php echo site_url(); ?>/wp-admin/admin-ajax.php">
<input type="hidden" name="order" value="2055">
<input type="hidden" name="action" value="previewemail">
        <select name="file">
        <?php
        foreach( $list as $item ){ ?>
            <option value="<?php echo $item; ?>"><?php echo str_replace('.php', '', $item); ?></option>
        <?php } ?>
        </select><input type="submit" value="Go"></form><?php
        global $order;
        $order = new WC_Order($_GET['order']);
        wc_get_template( 'emails/email-header.php', array( 'order' => $order ) );


        wc_get_template( 'emails/'.$_GET['file'], array( 'order' => $order ) );
        wc_get_template( 'emails/email-footer.php', array( 'order' => $order ) );

    }
    return null; 
}

add_action('wp_ajax_previewemail', 'previewEmail');

  • Bonito drobotnik. Creé una esencia ampliando esto para obtener los correos electrónicos disponibles del $woocommerce->mailer objeto y aplicar estilo en línea, como lo hace WooCommerce a los correos electrónicos salientes reales. Ver gist.github.com/zlove/3b9b6a611715ec3a8a60

    – zlovelady

    26 mayo 2015 a las 19:31


  • @drrobotnik: ¿Esto todavía funciona en el último WooCommerce (actualmente 2.4.5)? El resultado no es el que esperaba, por lo que me pregunto si es solo que este script ya no funciona correctamente o si es un problema con mis plantillas.

    – inspirado

    23 de agosto de 2015 a las 6:05

  • @vidainspirada. No confiaría en fragmentos de código sin la expectativa de un pequeño ajuste. Mirando el registro de cambios de Woo, creo que ha habido cambios significativos y es posible que ya no funcione. Cuando publiqué esto, no era perfecto. Espero que esto haya apuntado a algunas personas en la dirección correcta.

    – drrobotnik

    12 de septiembre de 2015 a las 3:22


Se me ocurrió una solución (complemento) que puede satisfacer sus necesidades, aunque solo funciona con las plantillas de correo electrónico disponibles predeterminadas, esto se debe a la naturaleza de cómo WooCommerce administra los correos electrónicos. Github

Repositorio de WordPress

¿Ha sido útil esta solución?