【WordPress】お問い合わせフォームプラグインである「Contact Form 7」について、導入からカスタマイズ方法、wp_mail関数との関係

Contact Form 7 のインストールと初期設定

https://contactform7.com

インストール方法

  1. WordPress管理画面プラグイン新規追加 をクリック
  2. 右上の検索ボックスに「Contact Form 7」と入力
  3. 該当プラグインが表示されたら「今すぐインストール」をクリック
  4. インストールが完了したら「有効化」をクリック

フォームの作成と設定

  1. 管理画面左メニューの「お問い合わせ」→「コンタクトフォーム」をクリック
  2. デフォルトのフォームがひとつ用意されているので、まずはそれをベースに編集する
  3. 「フォーム」「メール」「メッセージ」「追加設定」タブがあるので、内容をそれぞれ調整

下記のように、フォームの編集画面で短いコードを使用してフィールドを追加・削除します。

<label> お名前 (必須)
    [text* your-name]
</label>

<label> メールアドレス (必須)
    [email* your-email]
</label>

<label> 件名
    [text your-subject]
</label>

<label> メッセージ本文
    [textarea your-message]
</label>

[submit "送信"]

フォームを設置する

ショートコードをコピーし固定ページ・投稿ページに貼り付け

フォーム設定画面の上部、または一覧の「ショートコード」欄に表示されている下記のようなコードをコピーします。

エラー: コンタクトフォームが見つかりません。

ユーザーがフォームに入力 Contact Form 7プラグイン WordPressから管理者へメール送信

フォーム項目のカスタマイズ

Contact Form 7 は多様なフィールドタイプを用意しています。主なものを表にまとめると、次のようになります。

フィールドタイプショートコード例必須指定説明
テキスト[text your-text][text*]単一行の文字入力
メールアドレス[email your-email][email*]メールアドレス入力(フォーマットチェック)
電話番号[tel your-tel][tel*]電話番号入力
テキストエリア[textarea your-message][textarea*]複数行の文字入力
ドロップダウン[select your-select "選択1" "選択2"][select*]プルダウン式の選択
ラジオボタン[radio your-radio "選択1" "選択2"][radio*]1つだけ選択する場合
チェックボックス[checkbox your-check "選択1" "選択2"][checkbox*]複数の選択肢から複数選ぶ場合
ファイルアップロード[file your-file][file*]ファイルを添付して送信
送信ボタン[submit "送信"]なしフォーム送信ボタン

上記のショートコードを、Contact Form 7 の「フォーム」タブで自由に組み合わせることで、柔軟なフォームを作成できます。

エラーメッセージ・送信完了メッセージの編集

Contact Form 7 では、送信時に表示される下記のようなメッセージをカスタマイズできます。

  • 送信完了メッセージ
  • 入力エラー時のメッセージ
  • 不正なメールアドレス入力時のエラー など

これらは「メッセージ」タブで編集できます。デフォルトでは英語でのメッセージも含まれていますが、日本語に変更しておくとユーザーにとってわかりやすい表示になります。

スパム対策 (reCAPTCHA 連携)

Contact Form 7 には「reCAPTCHA」を活用できる機能があり、ロボットやスパム投稿を防止することが可能です。

  • Google reCAPTCHA のサイトキー・シークレットキーを取得
  • WordPress 管理画面 → 「お問い合わせ」→「インテグレーション」タブでキーを設定

これにより、フォームに自動的に reCAPTCHA が組み込まれ、スパムメールを大幅に減らすことが期待できます。

管理者通知メールのしくみ

CF7では、ユーザーがフォームを送信したタイミングで、WordPressのメール送信機能 (wp_mail) を通じて指定のメールアドレス宛に通知が飛ぶ仕組みになっています。

  • 送信元 (From) : 送信者情報をメールの送信元として指定
  • 送信先 (To) : 管理者通知メールを受け取る宛先
  • 件名 (Subject) : 通知メールの件名
  • 本文 (Message Body) : フォームで送られたデータを反映

これらの項目は、CF7の「メール」タブで柔軟に編集できます。

メールタブの各項目の詳細

CF7のフォーム編集画面を開くと、上部に「フォーム」「メール」「メッセージ」「追加設定」などのタブがあります。管理者通知メールに関わる設定は主に「メール」タブで行います。

2-1. メールタブの基本構成

デフォルトの例 (メールタブ)

送信先 (To): [your-email] ← ここを管理者のアドレスに変える場合があります
件名 (Subject): お問い合わせ: [your-subject]
送信元 (From): [your-name] <[your-email]>
追加ヘッダー (Additional headers): Reply-To: [your-email]
メッセージ本文 (Message Body):
お名前: [your-name]
メールアドレス: [your-email]
件名: [your-subject]
メッセージ本文:
[your-message]

-- 
このメールはお問い合わせフォームから送信されました

送信先 (To)

  • デフォルトでは [your-email] が設定されている場合が多いですが、管理者側で受け取りたいメールアドレスを入力することがほとんどです。例えば、info@example.com など。
  • 必要に応じてカンマ区切りで複数設定も可能です。例:
info@example.com, support@example.com

件名 (Subject)

  • ユーザーが入力した件名をメール件名に反映する場合は、ショートコード [your-subject] を使用します。
  • 固定の文言を含めることもできます。例: 【お問い合わせ】[your-subject]

送信元 (From)

  • 通常、「誰からのメールか」 がわかるように [your-name] <[your-email]> とするケースが多いです。
  • この際、メールの送信元(「From:」欄)にユーザーのメールアドレスをそのまま設定してしまうと、メールサーバー側でスパム判定されやすいことがあります。
    • そのため、一部環境では wordpress@example.com など、自社ドメインのメールアドレスにしておき、本文中にユーザーのアドレスを含める形が望ましい場合もあります。

追加ヘッダー (Additional headers)

  • Reply-To: [your-email] のように設定しておけば、管理者が返信ボタンを押すだけで、自動的にユーザー宛に返信できます。
  • CC や BCC などを指定することも可能です。例:
Cc: cc@example.com
Bcc: bcc@example.com

メッセージ本文 (Message Body)

  • ユーザーの入力値を適切に表示するため、各フォームタグを本文に入れておきます。
  • よくある例としては以下のような内容です。
お名前: [your-name]
メールアドレス: [your-email]
電話番号: [your-tel]
ご要望: [your-request]

-- 
このメールはお問い合わせフォームから送信されました

ここで使用する [your-name] などのタグは、「フォーム」タブ で設定しているショートコードと同じ名前になるよう注意しましょう。そうしないと、正しく反映されません。

wp_mail関数とは

1-1. wp_mailはPHPMailerのラッパ関数

WordPressでは内部的にPHPMailerというライブラリが使用されています。wp_mail() は PHPMailer を呼び出すためのラッパ関数で、以下のような形で利用します。

wp_mail(
  $to,      // 送信先 (文字列 or 配列)
  $subject, // 件名
  $message, // 本文
  $headers, // ヘッダ情報 (任意)
  $attachments // 添付ファイル (任意)
);
  • $to: 送信先のメールアドレス(または複数アドレスを配列で指定)
  • $subject: メールの件名
  • $message: メールの本文(HTMLメールも可)
  • $headers: 追加のヘッダ情報(From, Cc, Bcc, Reply-Toなど)
  • $attachments: 添付ファイルのパスを指定(配列)

$headers$attachments は不要であれば省略できます。

1-2. WordPressが標準で行う処理

  • From アドレスの指定がない場合、WordPressの設定に従って wordpress@サーバードメイン などのアドレスから送信されます。
  • ホスティングサーバーによっては、PHPのmail関数 が使われていたり、サーバー独自のセキュリティや設定が影響する場合があります。

2. デフォルト設定とカスタマイズの方法

2-1. フィルターフック (wp_mail_from / wp_mail_from_name)

WordPressはメール送信時に、下記のようなフィルターフックを用意しています。

  1. wp_mail_from
    • 送信元メールアドレス (From) を変更するためのフック
  2. wp_mail_from_name
    • 送信元名 (From Name) を変更するためのフック

たとえば、以下のようにテーマの functions.php などにコードを追加すると、送信元アドレスや送信元名を統一できます。

/**
 * wp_mail で送信されるメールの送信元アドレスを変更
 */
add_filter( 'wp_mail_from', function( $email ) {
    return 'no-reply@example.com'; // ここを任意のアドレスに
});

/**
 * wp_mail で送信されるメールの送信元名を変更
 */
add_filter( 'wp_mail_from_name', function( $name ) {
    return 'Example Site'; // ここを任意の送信者名に
});

2-2. 直接 wp_mail 呼び出し時のヘッダー指定

wp_mail() を直接呼ぶ際に、引数 $headers を指定する方法もあります。
たとえば、From と Reply-To を指定する例は以下のようになります。

$to = 'info@example.com';
$subject = 'テストメール';
$message = 'このメールはテスト送信です。';

// ヘッダ情報を配列で指定
$headers = [
    'From: Example Site <no-reply@example.com>',
    'Reply-To: support@example.com'
];

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

$headers を文字列の配列として指定することで、好きなだけヘッダーを追加することが可能です。

  • Cc, Bcc などを含めることも可能です。
$headers = [
    'From: Example Site <no-reply@example.com>',
    'Cc: cc@example.com',
    'Bcc: bcc@example.com',
    'Reply-To: support@example.com'
];