C'è un modo per inviare e-mail in formato HTML con la funzione wp_mail di Wordpress?


41

C'è un action_hook o qualcosa di simile che potrebbe aiutarmi a raggiungere questo obiettivo?

Ho provato ad aggiungere markup in una variabile di stringa PHP e ho appena lanciato un'e-mail con la funzione wp_mail in questo modo:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Ma è apparso in chiaro?

Qualche idea?

Risposte:


58

dalla pagina del codice di wp_mail :

Il tipo di contenuto predefinito è "text / plain" che non consente l'utilizzo di HTML. Tuttavia, puoi impostare il tipo di contenuto dell'e-mail utilizzando il filtro "wp_mail_content_type".

// In theme's functions.php or plug-in code:

function wpse27856_set_content_type(){
    return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

1
Hmm sembra utile. Solo una domanda, qualche motivo particolare per cui hai chiamato la tua funzione wpse27856_set_content_type?
racl101,

14
No, è solo un nome univoco basato sull'ID di questa particolare domanda. wpse = wp stachexchange, 27856 è l'id di questa domanda nell'URL. Lo faccio solo per evitare potenziali collisioni se le persone copiano / incollano il codice da qui.
Milo,

2
Puoi anche includere il tipo di contenuto nelle intestazioni delle email. Scopri come funziona il plugin Notifly.
Otto

oh sì, ah ah. Che n00b sono. Immagino sia l'id di questo post.
racl101,

1
Ciò interromperà l'e-mail di reimpostazione della password, poiché il collegamento di reimpostazione è racchiuso in <>.
Simon Josef Kok,

92

In alternativa, puoi specificare l'intestazione HTTP Content-Type nel parametro $ headers:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
Funziona meglio poiché l'add_filter talvolta mostra come allegato. Grazie per la condivisione!
deepakssn,

10

Non dimenticare di rimuovere il filtro del tipo di contenuto dopo aver utilizzato la funzione wp_mail. A seguito della denominazione della risposta accettata, è necessario eseguire questa operazione dopo l'esecuzione di wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Controlla questo ticket qui - Reimposta il tipo di contenuto per evitare conflitti - http://core.trac.wordpress.org/ticket/23578


7
Questo dovrebbe essere un commento, non una risposta, no?
Bob Diego,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.