
WordPressで「お問い合わせフォーム」を作るとき、プラグインを使う方法が定番ですが、自作テーマ内で完結したシンプルな方法もあります。
この記事では、プラグインを使わずにHTML+PHPでメール送信できるフォームの作り方と、セキュリティに重要なsanitize_xxx()関数の解説もあわせて紹介します。
まずはフォームをHTMLで作成
以下のコードを、お問い合わせページ用テンプレートなどに追加します:
<form method="post">
<p>
お名前:<br>
<input type="text" name="your_name" required>
</p>
<p>
メールアドレス:<br>
<input type="email" name="your_email" required>
</p>
<p>
お問い合わせ内容:<br>
<textarea name="your_message" rows="5" required></textarea>
</p>
<p>
<input type="submit" name="submit_form" value="送信">
</p>
</form>
functions.phpに送信処理を追記
フォームが送信されたときにメールが送信されるよう、functions.phpに以下のコードを追加します。
function my_contact_form_handler() {
if (isset($_POST['submit_form'])) {
$name = sanitize_text_field($_POST['your_name']);
$email = sanitize_email($_POST['your_email']);
$message = sanitize_textarea_field($_POST['your_message']);
$to = get_option('admin_email'); // 管理者宛に送信
$subject = '【お問い合わせ】' . $name;
$headers = 'From: ' . $email;
wp_mail($to, $subject, $message, $headers);
echo '<p>お問い合わせを受け付けました。</p>';
}
}
add_action('wp_head', 'my_contact_form_handler');
sanitize_xxx()ってなに?
sanitize_xxx()
とは、ユーザーが入力したデータを安全に処理するためのWordPress標準関数です。
フォームから送信されるデータには、意図的に不正なコード(JavaScriptやHTMLタグなど)が混入する可能性があります。
それを防ぐために、不要なタグや記号を削除・整形してくれるのがsanitize_xxx()
シリーズです。
主なサニタイズ関数の例
sanitize_text_field()
→ 改行やタグ、余分な空白などを削除して、1行のテキストにするsanitize_email()
→ 入力が正しいメール形式かチェック。不正なメールなら空文字にsanitize_textarea_field()
→ 改行を含む複数行テキスト向け。悪意あるスクリプトを除去
これらはすべてのフォームに基本的に必須です!
送信先のメールアドレスはどこ?
以下の部分:
$to = get_option('admin_email');
ここで指定されている「admin_email」は、WordPress管理画面の:
設定 > 一般 > 管理者メールアドレスに登録されているものです。
自分で指定したい場合は:
$to = 'your@email.com';
のように直接書いてもOKです。
セキュリティ面の注意点
- 必ず
sanitize_xxx()
で入力値を処理しましょう - HTMLメールにしたい場合は
headers
を調整(text/html) - reCAPTCHA(Google)導入でスパム防止も可能
おわりに
このように、WordPressの機能を活かしてシンプルかつ安全なお問い合わせフォームを自作することができます。
プラグインなしで実現できるため、サイトの表示速度にも有利です。
今後は、自動返信メール
や入力確認画面
の追加など、発展編も紹介していく予定です!
Web制作やHTML/CSSの学習に役立つ情報を初心者向けに発信しています。
プロフィールはこちら