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.