💭 概要・設計思想
ACS Contact Formは、WordPress初心者でも直感的にフォームを作成・管理できる軽量コンタクトフォームプラグインです。カスタム投稿タイプによるフォーム管理、トグルスイッチ方式のフィールド設定、ドラッグ&ドロップ不要のカスタムフィールド追加、ファイル添付機能を備え、1画面完結の編集UIにより有効化から設置までを最短で実現します。jQuery不使用のVanilla JS構成でサイト表示速度に影響を与えません。
✨ 主要機能一覧
ハニーポット方式をデフォルトで全フォームに自動挿入。CSSで非表示にした入力欄にBotが値を入力した場合、送信を無効化する。ユーザー側の設定は不要。
- ユーザーがフォーム入力後に送信ボタンをクリック
- Vanilla JSでフロントエンドバリデーション実行(必須チェック、メール形式チェック、ファイル形式・サイズチェック)
- バリデーション通過後、FormDataオブジェクトでファイルを含むデータをadmin-ajax.phpへAjax送信
- サーバー側でハニーポットチェック、全入力値のサニタイズ、添付ファイルのバリデーション(形式・サイズ・MIMEタイプ二重チェック)
- wp_handle_uploadで添付ファイルを一時保存
- wp_mailで管理者通知メール送信(添付ファイル付き)
- 自動返信がオンの場合、送信者へ返信メール送信(添付ファイルなし)
- 一時保存した添付ファイルを削除
-
フォーム部分が送信完了メッセージに切り替わり表示(ページ遷移なし)
-
reCAPTCHA v3対応
- 送信履歴の管理画面内保存・CSV出力
- 条件分岐表示(特定の選択肢を選んだ時だけ表示されるフィールド)
- 送信完了後のリダイレクトURL設定
- フォームデザインのカスタマイズ(配色・ボタンスタイル)
- 確認画面の表示オプション(送信前に入力内容を確認)
- 複数送信先の振り分け(フィールド値に応じて送信先メールを変更)
🔧 技術仕様(アーキテクチャ・依存関係)
技術仕様
- PHP 8.0以上、WordPress 6.0以上
- jQuery不使用、Vanilla JSのみ
- wp_mail関数によるメール送信
- カスタム投稿タイプ「acs_form」によるフォーム管理
- Ajax送信(ページ遷移なし)
- ショートコードおよびブロックエディタ対応
- テキストドメイン:acs-contact-form
- 関数プレフィックス:acs_cf_
- GPL v2+ライセンス
5-2. 標準フィールド設定
トグルスイッチ方式でフィールドのオン・オフを切り替え。各フィールドに「必須にする」チェックボックスを付与。
デフォルトON(初期状態で有効):
- お名前(必須)
- メールアドレス(必須)
- お問い合わせ内容(必須)
トグルで追加可能:
- 電話番号
- 会社名
- 住所
- 件名
5-3. カスタムフィールド設定
「フィールドを追加」ボタンで任意のフィールドを追加可能。追加時に以下の項目を設定する。
フィールド設定項目:
- フィールドラベル(表示名、例:「参加希望日」「ご予算」)
- フィールドタイプ(テキスト / テキストエリア / セレクトボックス / ラジオボタン / チェックボックス)
- 選択肢(セレクトボックス・ラジオボタン・チェックボックスの場合、1行1選択肢のテキストエリアで入力)
- プレースホルダー(テキスト・テキストエリアの場合)
- 必須にする(チェックボックス)
追加されたカスタムフィールドは編集画面上に縦に並び、各フィールドの右側に「削除」ボタンを配置。並び順はフォーム上の表示順と連動し、上下の「移動」ボタンで入れ替え可能(ドラッグ&ドロップは使用しない)。
5-4. ファイル添付設定
トグルスイッチでファイル添付フィールドの有効・無効を切り替え。
設定項目:
- ファイル添付フィールドの表示ラベル(デフォルト:「ファイルを添付」)
- 許可するファイル形式(デフォルト:jpg, jpeg, png, gif, pdf, doc, docx)
- 最大ファイルサイズ(デフォルト:5MB)
- 最大添付数(デフォルト:3ファイル)
- 必須にする(チェックボックス)
添付ファイルはwp_handle_upload関数で一時保存し、メール送信後に自動削除する。サーバーに恒久的にファイルを残さない設計とすることで、ストレージ圧迫とセキュリティリスクを回避する。
5-5. メール設定
- 送信先メールアドレス(デフォルト:WordPress管理者メールアドレス)
- メール件名テンプレート(デフォルト:「【{form_name}】{subject}」)
- 自動返信メール:オン・オフのトグル
- 自動返信メール件名テンプレート
- 自動返信メール本文テンプレート(プレースホルダー:{name}、{email}、{message}、{form_name}、{all_fields})
管理者通知メールには全フィールドの入力内容とファイル添付を含む。自動返信メールにはファイルを添付しない(送信者への不要な再送防止)。
フロントエンド表示仕様
フォームはACSテーマのデザインに依存せず、最小限のスタイルで出力する。標準フィールド、カスタムフィールド、ファイル添付フィールドは編集画面の設定順に上から縦に配置。送信ボタンはフォーム最下部に配置。バリデーションエラーは該当フィールドの直下に赤文字で表示。送信中は送信ボタンを無効化し「送信中…」に変更。送信完了後はフォーム全体が完了メッセージに切り替わる。
📁 ファイル構成
/acs-contact-form/
├── acs-contact-form.php(メインファイル)
├── readme.txt
├── assets/
│ ├── css/
│ │ ├── frontend.css(フォーム表示用)
│ │ └── admin.css(管理画面用)
│ └── js/
│ ├── frontend.js(バリデーション・Ajax送信・ファイルプレビュー)
│ └── admin.js(ショートコードコピー・トグルUI・カスタムフィールド追加/削除/並び替え)
├── inc/
│ ├── post-type.php(カスタム投稿タイプ登録)
│ ├── meta-boxes.php(編集画面の標準フィールド設定・カスタムフィールド設定・ファイル添付設定・メール設定)
│ ├── ajax-handler.php(送信処理・ファイルアップロード・メール送信)
│ ├── shortcode.php(ショートコード出力)
│ ├── block.php(ブロックエディタ登録)
│ ├── honeypot.php(スパム対策)
│ ├── file-handler.php(ファイルアップロード・バリデーション・一時保存・削除処理)
│ └── custom-fields.php(カスタムフィールドの保存・読み込み・レンダリング)
├── templates/
│ └── form-template.php(フロントエンドのフォームHTML)
└── languages/
└── acs-contact-form-ja.po
