Incluir arquivo de modelo HTML no correio do wp

2

Estou usando o email wp para enviar um email em html. Mas há bastante código html no e-mail, então ao invés de incluir todo o código na minha função wp mail, é possível ter o código em um template separado e apenas incluir este template na função? Aqui está o que eu tenho

<?php if ( isset( $_POST['submitted'] )) {
   add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
   $emailTo = 'person@gmail.com' ;
   $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);
}?>

Eu gostaria de poder colocar todo o meu código html em 'my_email_template', mas quando eu tento isso, nenhum e-mail é enviado. Estou incluindo o modelo incorretamente? Agradecemos antecipadamente por qualquer resposta.

    
por Xav 18.04.2013 / 21:38

3 respostas

5

Por meu comentário à sua pergunta, acredito que o problema é que include ing arquivos, seja diretamente ou usando get_template_part , provavelmente não vai te dar uma string para passar para $body e isso vai causar erros no código ou, pelo menos, o comportamento não esperado.

Eu evitaria ler arquivos na memória e criar uma função que retornasse seu $body content.

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

Em seguida, use $body = get_email_body_wpse_96357(); conforme necessário. Uma vantagem deste método é que você pode facilmente passar parâmetros para a função se você decidir fazer isso. Você também pode usar variáveis em um arquivo incluído, mas pode ser confuso.

Se você não quiser carregar essa função o tempo todo, coloque-a em um arquivo e inclua esse arquivo somente quando precisar da função.

    
por s_ha_dum 18.04.2013 / 23:11
4

A função get_template_part() não retorna o HTML, mas o faz ecoar (ele usa locate_template() , que carrega o arquivo - echo).

Você pode ativar o buffer de saída usando ob_start() e colocar o buffer em sua variável ou você pode usar file_get_contents() .

No seu caso, acho que a melhor solução é esta:

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

Aqui está o código de exemplo para usar o buffer de saída. Você poderá acessar todas as variáveis dentro do modelo que estão definidas acima "incluir linha".

  

WordPress: incluir modelo no email.

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);
    
por Mayur Chauhan 06.11.2018 / 00:39