2026年5月20日
2026年5月20日
WordPressのwp_mail()関数の使い方と活用方法
はじめに
wp_mail() はWordPress標準のメール送信関数です。PHPMailerをラップしており、フィルタフックで送信設定を細かく制御できます。プラグインやテーマからプログラムでメールを送信する場合に使用します。
基本的な使い方
// 最もシンプルなメール送信
wp_mail(
'recipient@example.com', // 送信先
'メールの件名', // 件名
'メール本文のテキストです。' // 本文
);
解決手順
ステップ1:HTMLメールを送信する
// functions.php — HTMLメールを送信
$to = 'user@example.com';
$subject = '注文確認';
$headers = ['Content-Type: text/html; charset=UTF-8'];
$message = '
<html>
<body>
<h1>ご注文ありがとうございます</h1>
<p>注文番号: <strong>#12345</strong></p>
<p>合計金額: ¥3,000</p>
</body>
</html>';
wp_mail($to, $subject, $message, $headers);
ステップ2:複数の宛先・CC・BCCを設定する
// 複数宛先・CC・BCC・カスタムFrom
$to = ['user1@example.com', 'user2@example.com'];
$subject = 'お知らせ';
$message = 'サイトからのお知らせです。';
$headers = [
'Content-Type: text/html; charset=UTF-8',
'From: サイト名 <noreply@example.com>',
'Cc: admin@example.com',
'Bcc: log@example.com',
'Reply-To: support@example.com',
];
wp_mail($to, $subject, $message, $headers);
ステップ3:添付ファイルを送信する
// 添付ファイル付きメール
$attachment = [
get_attached_file(123), // メディアIDから取得
WP_CONTENT_DIR . '/uploads/report.pdf', // パスで直接指定
];
wp_mail(
'user@example.com',
'月次レポート',
'添付のレポートをご確認ください。',
['Content-Type: text/plain; charset=UTF-8'],
$attachment
);
ステップ4:エラーハンドリング
// wp_mail_failed フックでエラーをキャッチ
add_action('wp_mail_failed', function(WP_Error $error) {
// エラーをログに記録
error_log('[wp_mail error] ' . $error->get_error_message());
// 管理者に通知(wp_mail は使えないので error_log のみ推奨)
});
// 送信成功の確認
$sent = wp_mail('user@example.com', '件名', '本文');
if (!$sent) {
// 送信失敗時の処理
error_log('メール送信に失敗しました');
}
ステップ5:wp_mailフィルタで送信内容を動的に変更する
// 特定条件でメール内容を変更
add_filter('wp_mail', function($args) {
// テスト環境では実際の宛先に送らない
if (defined('WP_ENV') && WP_ENV === 'staging') {
$args['to'] = 'dev-team@example.com';
$args['subject'] = '[STAGING] ' . $args['subject'];
}
return $args;
});
wp_mail() のシグネチャ
wp_mail(
string|string[] $to, // 送信先メールアドレス
string $subject, // 件名
string $message, // 本文
string|string[] $headers, // ヘッダー(省略可)
string|string[] $attachments // 添付ファイルパス(省略可)
): bool
注意事項
wp_mail()の戻り値はtrueでも実際に配信されるとは限りません。SMTPサーバーへの投入成功を示すだけです- HTMLメールを送信する場合は必ず
Content-Type: text/html; charset=UTF-8ヘッダーを追加してください - 大量送信には
wp_mail()は適していません。SendGrid・Mailgun等のバッチ送信APIを使用してください
まとめ
wp_mail($to, $subject, $message, $headers, $attachments) の5引数を覚えるだけで基本的なメール送信ができます。HTMLメールは Content-Type: text/html ヘッダーを追加し、エラーは wp_mail_failed フックで記録してください。