外部AI向けガイドに戻る
LiteWord テーマ情報
{
"_meta": {
"description": "LiteWordメールフォーム機能のAI向けメタ情報。管理画面の設定項目・フォームの仕組み・ショートコード・送信処理をAIが理解するためのファイル。WordPressの動作には一切影響しない。",
"version": "1.0",
"lastUpdated": "2026-03-21"
},
"overview": {
"aiDescription": "LiteWordテーマに内蔵されたお問い合わせフォーム機能。プラグイン不要で、管理画面「Lwお問い合わせ」から複数のフォームを作成・管理できる。フォームはショートコードで任意のページに設置する。送信はAjax(非同期)で行われ、ページ遷移なしで完了通知を表示する。reCAPTCHA v3対応、画像アップロード対応、受信履歴のDB保存・CSV出力にも対応。",
"adminMenuLocation": "WordPress管理画面の左メニュー「Lwお問い合わせ」(dashicons-email アイコン、メニュー位置22番)",
"requiredCapability": "manage_options(管理者権限)",
"entryPoint": "functions/mail_form/index.php(functions.phpから読み込まれる)",
"shortcode": "[lw_mail_form_select id=\"1\"]",
"maxForms": {
"free": 10,
"premium": 40
}
},
"adminPages": {
"formList": {
"title": "フォーム一覧",
"file": "form_list.php",
"url": "admin.php?page=lw_mail_form_set",
"aiDescription": "作成可能な全フォーム(無料版10個/プレミアム版40個)を一覧表示する画面。各フォームに対して有効/無効の切り替え(トグルスイッチ)、設定画面へのリンク、受信履歴へのリンク(プレミアム版のみ)、ショートコードのコピー機能を提供する。",
"features": {
"toggleSwitch": {
"aiDescription": "各フォームの有効/無効をAjaxで即座に切り替えられるトグルスイッチ。無効にしたフォームはフロントエンドで「現在ご利用いただけません」と表示され、送信ボタンもdisabledになる。",
"optionKey": "lw_mail_form_status_{フォーム番号}",
"defaultValue": "on"
},
"memo": {
"aiDescription": "各フォームにメモを残せるテキストエリア。フォームの用途や設置場所を管理者が記録するために使う。",
"premiumOnly": true,
"optionKey": "lw_mail_form_memo_{フォーム番号}"
},
"shortcodeCopy": {
"aiDescription": "ショートコードをクリックでコピーできる機能。コピー後にalertで通知する。",
"format": "[lw_mail_form_select id=\"{フォーム番号}\"]"
}
},
"userGuide": "フォームを使うには、まず一覧画面からフォーム番号を選んで設定し、表示されるショートコードをコピーして固定ページや投稿に貼り付ける。フォームは最大10個(プレミアムは40個)作成できる。"
},
"formSet": {
"title": "フォームの項目設定",
"file": "form_set.php",
"url": "admin.php?page=lw_mail_form_set&form_set={フォーム番号}",
"aiDescription": "フォームの入力項目(フィールド)を追加・編集・削除・並び替えする画面。項目はJSON形式でwp_optionsに保存される。ドラッグ&ドロップでの並び替え、全て開く/閉じるの一括操作に対応。",
"optionKey": "lw_mail_form_set_{フォーム番号}",
"storageFormat": "JSON文字列(配列)",
"defaultFields": [
{
"select_pattern": "name",
"required": true,
"label_text": "お名前",
"supplement_text": "例)山田太郎",
"shortcode": "your_name"
},
{
"select_pattern": "email",
"required": true,
"label_text": "メールアドレス",
"supplement_text": "例)sample@gmail.com",
"shortcode": "your_mail"
},
{
"select_pattern": "textarea",
"required": false,
"label_text": "お問合せ内容",
"shortcode": "your_message"
}
],
"fieldTypes": {
"name": {
"label": "お名前",
"aiDescription": "名前入力用のテキストフィールド。HTMLではinput[type=text]として出力される。",
"htmlOutput": "<input type=\"text\">"
},
"phone": {
"label": "電話番号",
"aiDescription": "電話番号入力用のテキストフィールド。HTMLではinput[type=text]として出力される。",
"htmlOutput": "<input type=\"text\">"
},
"email": {
"label": "メールアドレス",
"aiDescription": "メールアドレス入力用のテキストフィールド。HTMLではinput[type=text]として出力される。サンクスメールの送信先として [your_mail] ショートコードで参照される。",
"htmlOutput": "<input type=\"text\">"
},
"text": {
"label": "1行テキスト",
"aiDescription": "汎用的な1行テキスト入力フィールド。",
"htmlOutput": "<input type=\"text\">"
},
"textarea": {
"label": "テキストエリア",
"aiDescription": "複数行のテキスト入力フィールド。お問い合わせ内容や備考欄に使う。",
"htmlOutput": "<textarea>"
},
"radio": {
"label": "ラジオボタン",
"aiDescription": "単一選択のラジオボタン。選択肢は「選択肢」フィールドに改行区切りで入力する。",
"htmlOutput": "<input type=\"radio\">",
"requiresOptions": true
},
"checkbox": {
"label": "チェックボックス",
"aiDescription": "複数選択のチェックボックス。選択肢は改行区切りで入力。必須設定時は最低1つの選択が必要(JavaScriptで制御)。送信時はname属性に[]が付加される。",
"htmlOutput": "<input type=\"checkbox\">",
"requiresOptions": true
},
"select": {
"label": "セレクトボックス",
"aiDescription": "ドロップダウン形式の単一選択。選択肢は改行区切りで入力する。",
"htmlOutput": "<select>",
"requiresOptions": true
},
"image": {
"label": "画像アップロード",
"aiDescription": "画像・PDFのアップロードフィールド。JPEG/PNG/GIF/WebP/BMP/TIFF/HEIC/HEIF/AVIF と PDF に対応(ZIP・動画・Office文書は受け付けない)。1ファイル10MBまで(サーバーの上限がこれより小さい場合はそちらが優先)。選択後に即座にプレビューが表示される。送信時はwp_handle_upload()でWordPressのuploadsディレクトリに保存され、URLが値として記録される。実データを検証して許可形式以外は受理せず、その場合も送信自体は成功し「(添付ファイル「◯◯」は受理されませんでした:理由)」が値として記録される。",
"htmlOutput": "<input type=\"file\" accept=\".jpg,.jpeg,.png,.gif,.webp,.bmp,.tif,.tiff,.heic,.heif,.avif,.pdf,image/*\">",
"maxPreviewWidth": "480px"
},
"date": {
"label": "日付",
"aiDescription": "日付入力フィールド。ブラウザのネイティブ日付ピッカーを使用する。",
"htmlOutput": "<input type=\"date\">"
},
"time": {
"label": "時間",
"aiDescription": "時刻入力フィールド。ブラウザのネイティブ時刻ピッカーを使用する。",
"htmlOutput": "<input type=\"time\">"
}
},
"fieldSettings": {
"select_pattern": {
"aiDescription": "フィールドの種類を選択する。上記fieldTypesの中から選ぶ。",
"userGuide": "フォームに追加したい入力欄の種類を選ぶ。お問い合わせフォームなら「お名前」「メールアドレス」「テキストエリア」が基本セット。"
},
"label_text": {
"aiDescription": "フォームに表示されるフィールドのラベル(項目タイトル)。HTMLの<label>タグ内に出力される。改行可能(brSt関数で<br>に変換)。",
"userGuide": "ユーザーに表示される項目名。分かりやすい日本語で入力する。"
},
"required": {
"aiDescription": "必須項目かどうかのチェックボックス。ONにするとHTML5のrequired属性が付与され、「必須」バッジが表示される。OFFなら「任意」バッジが表示される。",
"userGuide": "チェックを入れると必須入力になり、未入力で送信しようとするとブラウザが警告を出す。"
},
"option": {
"aiDescription": "ラジオボタン・チェックボックス・セレクトボックスの選択肢。改行区切りで入力する。これらのタイプ選択時のみ表示される。",
"userGuide": "1行に1つの選択肢を入力する。例:「プランA(改行)プランB(改行)プランC」"
},
"supplement_text": {
"aiDescription": "フィールドの下に表示される補足テキスト。入力例や注意事項を記載するのに使う。改行可能。",
"userGuide": "入力例を表示したい時に使う。例:「例)山田太郎」"
},
"placeholder": {
"aiDescription": "入力欄内に薄いグレーで表示されるヒントテキスト(HTMLのplaceholder属性)。text/textarea/name/email/phoneタイプで有効。",
"userGuide": "入力欄に薄く表示されるヒント文。入力を開始すると消える。"
},
"shortcode": {
"aiDescription": "この項目の入力値をサンクスメールや受信メールで参照するためのショートコード名。[ショートコード名]の形式でメールテンプレート内で使う。自動生成されるが手動で変更も可能(例:your_name, your_mail, your_message)。",
"userGuide": "サンクスメールの本文で [your_name] のように使うと、ユーザーが入力した値に置き換わる。メールアドレスの項目は [your_mail] に設定しておくとサンクスメールの送信先として使える。"
}
},
"userGuide": "フォームの入力項目を自由に追加・削除・並び替えできる。項目を追加したら、タイプ・ラベル・必須/任意・ショートコード名を設定する。ショートコードはサンクスメールで入力値を参照するために使う。ドラッグ&ドロップで順番を入れ替え可能。"
},
"formSendButton": {
"title": "送信ボタン設定",
"file": "form_send_button.php",
"url": "admin.php?page=lw_mail_form_set&form_send_button={フォーム番号}",
"aiDescription": "送信ボタンに表示されるテキストをカスタマイズする画面。",
"settings": {
"subject_button": {
"aiDescription": "送信ボタンに表示されるテキスト。",
"optionKey": "form_send_set_{フォーム番号}_subject_button",
"defaultValue": "送信する",
"userGuide": "ボタンのテキストを変更できる。例:「無料相談を申し込む」「資料請求する」など、用途に合わせて変更するとCVRが上がりやすい。"
}
}
},
"formSendSet": {
"title": "受信メール設定",
"file": "form_send_set.php",
"url": "admin.php?page=lw_mail_form_set&form_send_set={フォーム番号}",
"aiDescription": "フォーム送信時にサイト管理者に届く通知メールの設定画面。件名・送信先・送信元の名前とメールアドレスを設定する。メール本文はシステムが自動生成する(HTML形式でフィールド名と入力値をラベル付きで表示)。",
"settings": {
"subject": {
"aiDescription": "管理者に届くメールの件名。",
"optionKey": "form_send_set_{フォーム番号}_subject",
"defaultValue": "{サイト名}のホームページからお問い合わせがありました。",
"userGuide": "受信したとき一目で分かる件名にする。例:「ホームページからお問い合わせがありました!」"
},
"to_mail": {
"aiDescription": "メールの送信先アドレス。カンマ区切りで複数指定可能。",
"optionKey": "form_send_set_{フォーム番号}_to_mail",
"defaultValue": "WordPressの管理者メールアドレス",
"userGuide": "フォームの送信内容を受け取るメールアドレスを入力する。複数人で受け取る場合はカンマで区切る。例:info@example.com,sales@example.com"
},
"from_name": {
"aiDescription": "メールの送信者名。受信者のメーラーに表示される。",
"optionKey": "form_send_set_{フォーム番号}_from_name",
"defaultValue": "{サイト名}",
"userGuide": "メールの差出人名として表示される。会社名やサイト名を入力する。"
},
"from_mail": {
"aiDescription": "メールの送信元アドレス。受信者が返信する際の宛先になる。自サイトのドメインと一致させないと迷惑メール扱いされる可能性がある。",
"optionKey": "form_send_set_{フォーム番号}_from_mail",
"defaultValue": "wordpress@{サイトドメイン}",
"userGuide": "送信元のメールアドレスを入力する。自サイトのドメインと一致するアドレス(info@自サイトドメイン等)を使うと迷惑メールになりにくい。"
}
},
"userGuide": "ここで設定するのは「管理者が受け取る通知メール」の設定。お客様への自動返信メール(サンクスメール)は別のタブで設定する。"
},
"formConsentSet": {
"title": "同意・規約などの設定",
"file": "form_consent_set.php",
"url": "admin.php?page=lw_mail_form_set&form_consent_set={フォーム番号}",
"aiDescription": "送信ボタンの上にプライバシーポリシーや利用規約への同意チェックを表示する設定画面。2つのタイプ(URLリンク型/テキスト表示型)から選べる。",
"settings": {
"switch": {
"aiDescription": "同意チェック欄の表示/非表示を切り替える。",
"optionKey": "form_consent_set_{フォーム番号}_switch",
"options": {
"on": "表示",
"off": "非表示"
},
"userGuide": "プライバシーポリシーへの同意が必要な場合は「表示」にする。個人情報を取得するフォームでは必須。"
},
"type": {
"aiDescription": "同意表示のタイプを選択する。URLリンク型は規約ページへのリンクを表示し、テキスト型はフォーム内に規約の全文を埋め込む。",
"optionKey": "form_consent_set_{フォーム番号}_type",
"options": {
"type_url": "URLで規約ページのリンク先を指定",
"type_text": "送信ボタンの上に文章の表示"
},
"userGuide": "シンプルにしたい場合は「URLリンク型」でプラポページへのリンクを貼る。規約全文を表示したい場合は「テキスト型」を選ぶ。"
},
"url": {
"aiDescription": "URLリンク型の場合のリンク先URL。空欄の場合はデフォルトで /privacy-policy が使われる。",
"optionKey": "form_consent_set_{フォーム番号}_url",
"defaultValue": "{サイトURL}/privacy-policy",
"userGuide": "プライバシーポリシーページのURLを入力する。"
},
"label": {
"aiDescription": "チェックボックスのラベルテキスト。「{ラベル}に同意する」の形式で表示される。",
"optionKey": "form_consent_set_{フォーム番号}_label",
"defaultValue": "プライバシーポリシー",
"userGuide": "例:「利用規約」「プライバシーポリシー」など。チェックボックスには「○○に同意する」と表示される。"
},
"p": {
"aiDescription": "テキスト型の場合にフォーム内に表示される規約の本文。WordPressのリッチエディタ(TinyMCE)で編集可能。H2/H3/H4/Pタグが使える。",
"optionKey": "form_consent_set_{フォーム番号}_p",
"userGuide": "規約全文を直接入力する。見出し(H2〜H4)や段落を使って読みやすく整形できる。"
}
}
},
"formThanksPageSet": {
"title": "サンクスページ設定",
"file": "form_thanks_page_set.php",
"url": "admin.php?page=lw_mail_form_set&form_thanks_page_set={フォーム番号}",
"aiDescription": "フォーム送信完了後にリダイレクトするページのURLを設定する画面。設定すると、送信完了ポップアップ表示後2秒でサンクスページにリダイレクトされる。未設定の場合はポップアップのみ表示し、トップページへのリンクが表示される。",
"settings": {
"thanks_page_url": {
"aiDescription": "送信完了後のリダイレクト先URL。空欄の場合はリダイレクトしない(ポップアップのみ)。",
"optionKey": "form_thanks_page_set_{フォーム番号}_thanks_page_url",
"defaultValue": "(空欄=リダイレクトなし)",
"userGuide": "サンクスページを作成している場合はそのURLを入力する。コンバージョン計測(Google広告等)のためにサンクスページを用意するのが一般的。例:{サイトURL}/thanks"
}
},
"userGuide": "GTM/GA4でコンバージョンを計測する場合、サンクスページURLを設定しておくと計測しやすい。send.jsではdataLayer.pushによるイベント発火(litewordFormSubmit)にも対応しているため、サンクスページなしでもGTMで計測は可能。"
},
"formThanksMailSet": {
"title": "サンクスメール設定",
"file": "form_thanks_mail_set.php",
"url": "admin.php?page=lw_mail_form_set&form_thanks_mail_set={フォーム番号}",
"aiDescription": "フォーム送信者(お客様)に自動返信メールを送る設定画面。1つのフォームに対して最大5パターンのサンクスメールを設定可能(タブ切り替えUI)。各パターンごとにON/OFFを切り替えられる。メール本文内でショートコード([your_name]等)や[form_data](全入力内容の展開)が使える。",
"premiumOnly": false,
"premiumNote": "サンクスメール機能自体はカスタマイザーの「拡張機能」セクション(lw_extensions_mail_form_thanks_mail_switch)でON/OFFを切り替える。OFFの場合はこの設定画面にアクセスするとエラーメッセージが表示される。",
"maxPatterns": 5,
"settings": {
"switch": {
"aiDescription": "このサンクスメールパターンのON/OFF。ONにすると送信時にこのパターンのメールが送られる。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_switch",
"options": {
"on": "ON",
"off": "OFF"
},
"defaultValue": "off"
},
"subject": {
"aiDescription": "サンクスメールの件名。ショートコード([your_name]等)が使える。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_subject",
"defaultValue": "[your_name]様 お問合わせありがとうございます。",
"userGuide": "件名にお客様の名前を入れたい場合は [your_name] を使う。"
},
"to_mail": {
"aiDescription": "サンクスメールの送信先。通常は [your_mail] を指定して、フォームに入力されたメールアドレスに送る。固定アドレスの直接指定も可能。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_to_mail",
"defaultValue": "[your_mail]",
"userGuide": "[your_mail] と入力すると、お客様がフォームに入力したメールアドレスに送られる。"
},
"from_name": {
"aiDescription": "サンクスメールの差出人名。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_from_name",
"defaultValue": "{サイト名} 担当者",
"userGuide": "会社名や担当者名を入力する。"
},
"from_mail": {
"aiDescription": "サンクスメールの送信元アドレス。サイトのドメインと一致しないと迷惑メールになる可能性がある。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_from_mail",
"defaultValue": "info@{サイトドメイン}",
"userGuide": "自サイトドメインのメールアドレスを入力する。Gmailなど外部メールを指定すると迷惑メールになりやすい。"
},
"body": {
"aiDescription": "サンクスメールの本文。ショートコード([your_name]、[your_mail]等のフォーム項目ショートコード)と[form_data](全入力内容を「ラベル: 値」形式で展開)が使える。テキスト形式で入力し、送信時にHTML(nl2br)に変換される。",
"optionKey": "form_send_thanks_{パターン番号}_{フォーム番号}_body",
"defaultValue": "[your_name] 様\n{サイト名}にお問い合わせいただきありがとうございます。\n担当より通常 2〜3 営業日以内にご返信いたします。\n\n※ 本メールは自動送信です。\n内容に心当たりがない場合は破棄していただければ幸いです。",
"availableShortcodes": {
"[your_name]": "お名前フィールドの入力値(shortcodeが'your_name'の項目)",
"[your_mail]": "メールアドレスフィールドの入力値(shortcodeが'your_mail'の項目)",
"[your_message]": "お問い合わせ内容フィールドの入力値(shortcodeが'your_message'の項目)",
"[form_data]": "全フォーム入力内容を「ラベル: 値」形式で一括展開する特殊ショートコード",
"[カスタムショートコード]": "フォーム項目設定で任意に付けたショートコード名"
},
"userGuide": "お客様への自動返信メールの本文。[your_name]でお客様の名前を表示し、[form_data]で入力内容を全て含めるのが一般的。"
}
},
"userGuide": "お客様がフォームを送信した直後に自動返信メールを送る機能。最大5パターン設定でき、例えば「お客様への確認メール」と「社内の別部署への通知」を別パターンで設定する、といった使い方ができる。"
},
"formRecaptchaSet": {
"title": "reCAPTCHA設定",
"file": "form_recaptcha_set.php",
"url": "admin.php?page=lw_mail_form_set&form_page=recaptcha",
"aiDescription": "Google reCAPTCHA v3の設定画面。全フォーム共通の設定で、スパムボットによる不正送信を防ぐ。v3のみ対応(v2は使用不可)。LINEブラウザではreCAPTCHAが動作しないため、自動的に無効化される。",
"settings": {
"switch": {
"aiDescription": "reCAPTCHAの有効/無効を切り替える。",
"optionKey": "lw_recaptcha_switch",
"options": {
"on": "有効"
},
"defaultValue": "無効",
"userGuide": "スパム送信が多い場合に有効にする。サイトキーとシークレットキーの取得が必要。"
},
"site_key": {
"aiDescription": "Google reCAPTCHA v3のサイトキー。フロントエンドのJavaScriptで使用する。",
"optionKey": "lw_form_recaptcha_site_key",
"userGuide": "Google reCAPTCHA管理ページ(https://www.google.com/recaptcha/admin)で取得する。v3を選択して作成すること。"
},
"secret_key": {
"aiDescription": "Google reCAPTCHA v3のシークレットキー。サーバーサイドの検証で使用する。",
"optionKey": "lw_form_recaptcha_secret_key",
"userGuide": "サイトキーと一緒にGoogle reCAPTCHA管理ページで取得する。外部に公開しないこと。"
},
"display": {
"aiDescription": "reCAPTCHAバッジ(画面右下に表示されるGoogleのロゴ)の表示/非表示。",
"optionKey": "lw_recaptcha_display",
"options": {
"on": "表示",
"off": "非表示"
},
"userGuide": "非表示にする場合は、Googleの利用規約に従いページ内にreCAPTCHA使用の旨を別途記載する必要がある。"
}
},
"technicalNotes": {
"lineDetection": "LINEブラウザではreCAPTCHAが正常に動作しないため、User-Agentに'Line'が含まれる場合は自動的にreCAPTCHAを無効化する(is_line_browser()関数)。",
"scoreThreshold": "reCAPTCHAスコアが0.5未満の場合はスパムと判定して送信を拒否する。",
"tokenFlow": "フロント側でgrecaptcha.execute()でトークンを取得→送信時にFormDataに付加→サーバー側でGoogle APIに検証リクエスト→スコア判定"
}
},
"formReceptionHistoryList": {
"title": "受信履歴",
"file": "form_reception_history_list.php",
"url": "admin.php?page=lw_mail_form_set&form_reception_history_list={フォーム番号}",
"aiDescription": "フォームから受信したお問い合わせの履歴を一覧表示する画面。ページネーション(1ページ20件)、テキスト検索、CSVダウンロード、データコピー(表示中のデータをTSV/HTML形式でクリップボードにコピー)、個別削除、全削除に対応。",
"premiumOnly": true,
"premiumNote": "受信履歴機能はLW_EXPANSION_BASE(プレミアム版)のみ使用可能。さらにカスタマイザーの拡張機能設定(lw_extensions_mail_form_reception_history_switch)でONにする必要がある。",
"features": {
"search": {
"aiDescription": "受信履歴のテキスト検索。送信データ(body)と送信元ページタイトル(post_title)を対象にLIKE検索する。",
"userGuide": "お客様の名前やメールアドレスで検索できる。"
},
"csvDownload": {
"aiDescription": "受信履歴をCSVファイルとしてダウンロードする。検索結果に絞り込んだ状態でもダウンロード可能。BOM付きUTF-8でExcelの文字化けを防止。",
"file": "mail_download_csv.php",
"userGuide": "CSVダウンロードでExcelやGoogleスプレッドシートで分析できる。検索で絞り込んだ結果のみをダウンロードすることも可能。"
},
"copyData": {
"aiDescription": "表示中のデータをTSV形式(テキスト)とHTML table形式の両方でクリップボードにコピーする。スプレッドシートに貼り付けると表形式で表示される。",
"userGuide": "「データをコピー」ボタンで表示中のデータをコピーし、ExcelやGoogleスプレッドシートにそのまま貼り付けられる。"
},
"deleteRow": {
"aiDescription": "受信履歴を1件削除する。確認ダイアログあり。CSRF対策(nonce検証)済み。",
"action": "lw_mail_del_row"
},
"deleteAll": {
"aiDescription": "そのフォームの受信履歴を全件削除する。確認ダイアログあり。CSRF対策(nonce検証)済み。",
"action": "lw_mail_del_all"
},
"pagination": {
"aiDescription": "1ページ20件のページネーション。現在ページの前後2ページ分のリンクを表示し、それ以外は「...」で省略する。",
"perPage": 20
}
},
"dbTable": {
"tableName": "wp_lw_mail_reception_history",
"columns": {
"id": "BIGINT 主キー(AUTO_INCREMENT)",
"created_at": "DATETIME 受信日時(DEFAULT CURRENT_TIMESTAMP)",
"subject": "TEXT メールの件名",
"body": "LONGTEXT フォーム入力データ(JSON形式、{ラベル: 値})",
"is_logged_in": "TINYINT 1=ログインユーザー / 0=ゲスト",
"user_id": "BIGINT WordPressユーザーID",
"form_set_no": "SMALLINT フォームセット番号",
"post_id": "BIGINT 送信元の投稿/固定ページID",
"post_title": "TEXT 送信元のページタイトル",
"post_author": "BIGINT 送信元ページの投稿者ID",
"sender_ip": "VARCHAR(45) 送信者のIPアドレス",
"user_agent": "TEXT 送信者のユーザーエージェント"
},
"indexes": [
"created_at",
"form_set_no",
"post_id",
"user_id"
]
}
}
},
"tabNavigation": {
"aiDescription": "各フォームの設定画面はタブ形式のナビゲーションで切り替える。現在のタブはURL比較で自動ハイライトされる。",
"tabs": [
{
"label": "フォームの項目設定",
"param": "form_set"
},
{
"label": "送信ボタン設定",
"param": "form_send_button"
},
{
"label": "受信メール設定",
"param": "form_send_set"
},
{
"label": "同意・規約などの設定",
"param": "form_consent_set"
},
{
"label": "サンクスページ設定",
"param": "form_thanks_page_set"
},
{
"label": "サンクスメール設定",
"param": "form_thanks_mail_set",
"premiumOnly": true
},
{
"label": "reCAPTCHA設定",
"param": "form_page=recaptcha",
"global": true
},
{
"label": "受信履歴",
"param": "form_reception_history_list",
"premiumOnly": true
}
]
},
"shortcode": {
"name": "lw_mail_form_select",
"aiDescription": "フォームをフロントエンドに表示するためのWordPressショートコード。固定ページや投稿の本文に記述する。",
"syntax": "[lw_mail_form_select id=\"{フォーム番号}\"]",
"attributes": {
"id": {
"aiDescription": "表示するフォームの番号(1〜10、プレミアムは1〜40)。管理画面の「Lwお問い合わせ」一覧に表示される番号と対応する。",
"required": true,
"type": "integer"
}
},
"userGuide": "固定ページの本文(ブロックエディタの場合はショートコードブロック、クラシックエディタの場合はそのまま記述)に [lw_mail_form_select id=\"1\"] を入力するとフォームが表示される。idの番号は管理画面の一覧で確認できる。"
},
"submissionFlow": {
"aiDescription": "フォーム送信の処理フロー。フロントエンドのsend.jsがAjaxでサーバーに送信し、mail-ajax.phpが処理する。",
"steps": [
"1. ユーザーがフォームに入力して送信ボタンをクリック",
"2. send.jsがsubmitイベントを捕捉し、デフォルトの送信を防止",
"3. FormDataオブジェクトを構築(画像ファイルを含むmultipart/form-data)",
"4. reCAPTCHAが有効な場合、grecaptcha.execute()でトークンを取得してFormDataに追加",
"5. fetch()でadmin-ajax.phpにPOST送信(action=lw_mail_form_submit)",
"6. サーバー側でCSRFチェック(nonce検証)",
"7. フォームの有効状態チェック(無効ならエラー)",
"8. reCAPTCHA検証(有効時のみ、スコア0.5未満で拒否)",
"9. フォームデータのサニタイズ",
"10. 画像ファイルがあればwp_handle_upload()で保存",
"11. ショートコードマップ(sc_map)の構築",
"12. 管理者宛てメールの送信(HTML形式)",
"13. サンクスメールの送信(最大5パターン、ショートコード置換あり)",
"14. 受信履歴のDB保存(プレミアム版で機能ON時のみ)",
"15. JSON成功レスポンスを返す(送信完了ポップアップHTML含む)",
"16. フロントでポップアップを表示し、フォームをリセット",
"17. GTM/GA4用カスタムイベント(litewordFormSubmit)をdataLayerにpush",
"18. サンクスページURLが設定されている場合、2秒後にリダイレクト"
],
"ajaxAction": "lw_mail_form_submit",
"ajaxHooks": [
"wp_ajax_lw_mail_form_submit",
"wp_ajax_nopriv_lw_mail_form_submit"
],
"nonceAction": "lw_mail_form_nonce",
"jsFile": "send.js",
"phpFile": "mail-ajax.php"
},
"gtmIntegration": {
"aiDescription": "フォーム送信成功時にGTM/GA4のコンバージョン計測用イベントが自動発火する。サンクスページを用意しなくてもイベントベースで計測可能。",
"eventName": "litewordFormSubmit",
"dataLayerVariables": {
"event": "litewordFormSubmit",
"formSetNo": "送信されたフォームの番号",
"postId": "フォームが設置されたページのID"
},
"customEvent": {
"type": "CustomEvent",
"name": "litewordFormSubmit",
"detail": [
"formSetNo",
"postId",
"form"
]
},
"userGuide": "GTMでコンバージョンを計測する手順:(1) GTMでカスタムイベントトリガーを作成(イベント名:litewordFormSubmit)、(2) GA4のイベントタグを作成してトリガーに紐付け、(3) GA4でそのイベントをコンバージョンとしてマーク。フォーム番号別に計測したい場合はdataLayer変数formSetNoを使う。"
},
"premiumFeatures": {
"aiDescription": "プレミアム版(LW_HAS_SUBSCRIPTION / LW_EXPANSION_BASE)で追加される機能の一覧。",
"features": [
{
"name": "フォーム数の拡張",
"description": "無料版10個→プレミアム版40個に拡張",
"constant": "LW_HAS_SUBSCRIPTION"
},
{
"name": "フォームメモ機能",
"description": "各フォームにメモ(用途・設置場所の記録)を残せる",
"constant": "LW_HAS_SUBSCRIPTION"
},
{
"name": "サンクスメール",
"description": "フォーム送信者に自動返信メールを送る機能。カスタマイザーでON/OFF切替(lw_extensions_mail_form_thanks_mail_switch)",
"constant": "LW_EXPANSION_BASE"
},
{
"name": "受信履歴",
"description": "フォーム送信データをDBに保存し、管理画面で閲覧・検索・CSVダウンロード・コピーできる機能。カスタマイザーでON/OFF切替(lw_extensions_mail_form_reception_history_switch)",
"constant": "LW_EXPANSION_BASE"
}
]
},
"fileStructure": {
"aiDescription": "mail_formディレクトリ内の全ファイルとその役割の一覧。",
"files": {
"index.php": "エントリポイント。管理メニュー登録、各ファイルの読み込み、URLパラメータに応じた画面ルーティング。",
"functions.php": "共通関数(reCAPTCHA判定、LINEブラウザ判定、管理画面ヘッダー、タブナビゲーション、フォーム有効/無効のトグル、履歴削除処理)。フロントエンド用JSの登録・ローカライズもここで行う。",
"form_list.php": "フォーム一覧画面(トグルスイッチ、ショートコードコピー、メモ機能)。",
"form_set.php": "フォーム入力項目の設定画面(フィールドの追加・編集・削除・並び替え)。",
"form_send_button.php": "送信ボタンテキストの設定画面。",
"form_send_set.php": "管理者向け受信メールの設定画面(件名・送信先・送信元)。",
"form_consent_set.php": "同意チェック・規約表示の設定画面。",
"form_thanks_page_set.php": "サンクスページURL設定画面。",
"form_thanks_mail_set.php": "サンクスメール設定画面(5パターン、タブ切り替え)。",
"form_recaptcha_set.php": "reCAPTCHA v3の設定画面(サイトキー・シークレットキー)。",
"form_put.php": "フロントエンド用のフォームHTML生成(ショートコード処理、各フィールドタイプの出力、同意欄、送信ボタン、reCAPTCHAスクリプト登録、サンクスページリダイレクト)。",
"mail-ajax.php": "Ajax送信処理(CSRF検証、reCAPTCHA検証、画像アップロード、管理者メール送信、サンクスメール送信、受信履歴保存)。",
"reception_history.php": "受信履歴のDBテーブル作成(dbDelta)とデータ保存関数。",
"form_reception_history_list.php": "受信履歴一覧画面(ページネーション、検索、CSVダウンロード、データコピー、削除)。",
"mail_download_csv.php": "受信履歴のCSVダウンロード処理。BOM付きUTF-8。",
"send.js": "フロントエンドのAjax送信処理(FormData構築、reCAPTCHAトークン取得、画像プレビュー、GTM/GA4イベント発火)。",
"style.scss": "管理画面用のSCSSソースファイル。",
"style.css": "管理画面用のCSSファイル。",
"style.min.css": "管理画面用の圧縮CSSファイル(実際に読み込まれる)。",
"style.css.map": "SCSSのソースマップ。",
"put_style/ptn_1.css": "フロントエンド用のフォームデザインCSS(パターン1)。"
}
},
"securityMeasures": {
"aiDescription": "メールフォーム機能に実装されているセキュリティ対策の一覧。",
"measures": [
"CSRF対策: wp_nonce_field() / check_ajax_referer() による全送信のnonce検証",
"権限チェック: 管理画面操作はcurrent_user_can('manage_options')で管理者権限を確認",
"入力サニタイズ: sanitize_text_field() / sanitize_textarea_field() / sanitize_email() による入力値のサニタイズ",
"出力エスケープ: esc_html() / esc_attr() / esc_url() / esc_js() による出力時のエスケープ",
"reCAPTCHA v3: Google reCAPTCHAによるボット判定(スコア0.5未満で拒否)",
"ファイルアップロード: wp_handle_upload()による安全なファイル処理",
"直接アクセス防止: 全PHPファイルの先頭でif(!defined('ABSPATH')) exit;",
"SQLインジェクション対策: $wpdb->prepare()によるプリペアドステートメント"
]
}
}