Incluir el archivo de plantilla HTML en el correo wp

2

Estoy usando wp mail para enviar un correo electrónico html. Pero hay una gran cantidad de código html en el correo electrónico, así que en lugar de incluir todo el código en mi función de correo electrónico, ¿es posible tener el código en una plantilla separada y simplemente incluir esta plantilla en la función? Aquí está lo que tengo

<?php if ( isset( $_POST['submitted'] )) {
   add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
   $emailTo = '[email protected]' ;
   $subject = 'This is the subject';
   $body = get_template_part( 'includes/my_email_template' );
   $headers = 'From: My Name' . "\r\n";
   wp_mail($emailTo, $subject, $body, $headers);
}?>

Me gustaría poder poner todo mi código html en 'my_email_template' pero cuando intento esto, no se envía ningún correo electrónico. ¿Estoy incluyendo la plantilla incorrectamente? Gracias de antemano por cualquier respuesta.

    
pregunta Xav 18.04.2013 - 21:38

3 respuestas

5

Por mi comentario a tu pregunta, creo que el problema es que include ing archivos, ya sea directamente o usando get_template_part no es probable que te de una cadena para pasar a $body y eso causará Errores en el código, o al menos un comportamiento inesperado.

Evitaría leer archivos en la memoria y solo crearía una función que devuelva su contenido $body .

function get_email_body_wpse_96357() {
    $body = '<p>Hi</p>';
    return $body;
}

Luego use $body = get_email_body_wpse_96357(); según sea necesario. Una ventaja de este método es que puede pasar parámetros fácilmente a la función si alguna vez decide hacerlo. También puede usar variables en un archivo incluido, pero puede ser complicado.

Si no desea cargar esa función todo el tiempo, colóquela solo en un archivo e incluya ese archivo solo cuando necesite la función.

    
respondido por el s_ha_dum 18.04.2013 - 23:11
4

La función get_template_part() no devuelve el HTML, sino que lo repite (usa locate_template() que carga el archivo - echo).

Puede activar el búfer de salida utilizando ob_start() y poner el búfer en su variable o puede usar file_get_contents() .

En su caso, creo que la mejor solución es esta:

$body = file_get_contents(TEMPLATEPATH . 'includes/my_email_template.php');
    
respondido por el ItayXD 18.04.2013 - 22:40
0

Aquí está el código de ejemplo para usar el búfer de salida. Podrá acceder a todas las variables dentro de la plantilla que se definen arriba "incluir línea".

  

WordPress: incluya la plantilla en el correo electrónico.

ob_start();
include(get_stylesheet_directory() . '/assets/email-templates/booking-details-template.php');
$email_content = ob_get_contents();
ob_end_clean();
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to_email, "Booking details", $email_content, $headers);
    
respondido por el Mayur Chauhan 06.11.2018 - 00:39

Lea otras preguntas en las etiquetas