Wordpressのwp_mail関数でHTML形式のメールを送信する方法はありますか?


41

これを達成するのに役立つaction_hookなどがありますか?

PHPの文字列変数にマークアップを追加してみたところ、次のようなwp_mail関数を使用してメールを送信しました。

$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);

しかし、それは平文として現れましたか?

何か案は?

回答:


58

wp_mail codexページから:

デフォルトのコンテンツタイプは「text / plain」で、HTMLの使用は許可されていません。ただし、「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
うーん、便利ですね。関数wpse27856_set_content_typeに名前を付けた特定の理由は何ですか?
racl101

14
いいえ、この特定の質問のIDに基づいた一意の名前です。wpse = wp stachexchange、27856はURL内のこの質問のIDです。人々がここからコードをコピー/ペーストした場合に潜在的な衝突を避けるために、私はそれをします。
ミロ

2
メールヘッダーにContent-Typeを含めることもできます。Notiflyプラグインがどのように機能するかを確認してください。
オットー

そうそう、ハハ。私はなんてn00bです。この投稿のIDだと思います。
racl101

1
リセットリンクが<>でラップされているため、これによりパスワードリセットメールが破損します。
サイモンジョセフコク

90

別の方法として、$ headersパラメーターでContent-Type HTTPヘッダーを指定できます。

$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
これは、add_filterが添付ファイルとして表示されることがあるため、より効果的です。共有してくれてありがとう!
-deepakssn

10

wp_mail関数を使用した後、コンテンツタイプフィルターを削除することを忘れないでください。受け入れられた回答の命名に従って、wp_mailの実行後にこれを行う必要があります。

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

ここでこのチケットを確認します-競合を避けるためにコンテンツタイプをリセットします-http://core.trac.wordpress.org/ticket/23578


7
これは、答えではなくコメントでなければなりませんか?
ボブディエゴ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.