Shed Form

無料

確認画面・スパム対策・送信履歴機能を備えた、日本語サイト向け WordPress お問い合わせフォームプラグインです。

対応: WordPress 6.0〜7.0.2  / PHP 8.1以上

スクリーンショット

使い方

確認画面と営業・売り込みをブロックしたお問い合わせフォームのプラグインです。
随時機能が追加されており、ドキュメント更新が追いついていなのでご了承ください。


フィールド設定

左側にビジュアルで項目設定を行い、右側のプレビューを見ながら項目を調整していきます。

バリデーションチェックについて、いくつか最初からありますが正規表現でカスタム設定を行なうことが可能です。

フィールド設定画面1
フィールド設定画面2

メール設定

管理者とフォーム登録者に自動送信するメールの設定を行なうことができます。

メール設定画面

基本設定

フォームの基本設定です。レイアウト、完了メッセージボタン名称、送信履歴、受付番号などの設定が可能です。
スパム対策として「Cloudflare Turnstile」の利用が可能です。
その他、セキュリティ設定で、独自のスパム判定機能を実装しています。

基本設定画面

通知設定

Googleチャット通知とLINE通知の2つの機能を追加しました。メールに問い合わせが埋もれてしまうことを避け、必要なお問い合わせを受け取るために追加しました。

Googleチャット通知

LINE通知

デモ

お名前 必須
フリガナ 必須
メールアドレス 必須
メールアドレス(確認) 必須
郵便番号・都道府県 必須
市区町村・番地 必須
建物名・部屋番号 任意
電話番号 任意
お問い合わせ種別 任意
お問い合わせ内容 必須
個人情報の取り扱い 必須
利用規約 必須

主な機能

フォームビルダー

  • ドラッグ&ドロップでフィールドを自由に並び替え
  • 行レイアウトの列構成を自由に変更(1列〜4列・カスタム比率)
  • リアルタイムプレビューで確認しながら編集

フィールドタイプ(12種類)

  • テキスト/テキストエリア/メールアドレス/電話番号/数値
  • 日付/セレクトボックス/ラジオボタン/チェックボックス
  • ファイル添付/同意チェックボックス/隠しフィールド

レイアウト

  • テーブル型・スタック型・インライン型・DL型の4スタイルに対応
  • スマートフォンでは自動的に縦積みレイアウトに切り替え

バリデーション

  • 必須チェック・文字数制限・メール形式・電話番号形式
  • ひらがな/カタカナ/全角/半角のみなど文字種チェック
  • 生年月日・郵便番号・URL形式
  • メールアドレス確認(2回入力)・キャリアメール除外
  • 複数のバリデーションルールを組み合わせて設定可能

便利機能

  • 郵便番号入力で住所を自動入力(zipcloud API使用)
  • 条件分岐:選択値に応じてフィールドを表示/非表示
  • 受付番号の自動採番(プレフィックス・桁数を設定可能)

メール送信

  • 管理者通知メール・自動返信メールをテンプレートで自由に設定
  • CC/BCC対応・差出人名/メールアドレスの変更
  • テンプレート変数で入力内容をメールに埋め込み
  • 送信失敗時のログ記録・管理画面から再送信

スパム対策

  • Cloudflare Turnstile統合(ユーザー操作不要のBOT対策)
  • レート制限(同一IPからの連続送信を制限)
  • IPブロックリスト
  • スコアリング方式のコンテンツフィルタリング
  • 日本語判定・NGフレーズ検出(正規表現対応)
  • 営業・売り込みメールのサイレントブロック

送信履歴管理

  • 送信データをデータベースに保存
  • ステータス管理(未読/既読/対応済み)
  • 内部メモ機能(対応履歴を記録)
  • キーワード・期間・ステータスで絞り込み
  • CSV出力(Excel対応・UTF-8 BOM付き)
  • メール送信ログ・再送信機能

更新履歴

v1.12.5
  • 🔧 セキュリティ: 期限切れメッセージの表示処理を innerHTML から textContent に修正し、DOM XSS の経路を塞ぎました。
  • 🔧 セキュリティ: アップロードフォルダの .htaccess を Apache 2.2/2.4 両対応の記述に修正しました(従来は Apache 2.4 専用の記述のみで、Apache 2.2 環境では保護が効かない場合がありました)。既存のアップロードフォルダはアップデート時に自動的に再生成されます。
v1.12.4
  • 🔧 セキュリティ: クライアント IP の判定で X-Forwarded-For ヘッダーを無条件に信頼しないよう修正しました。プロキシ経由であることを確認できる場合のみ、かつ最も右の値を使用します。従来はヘッダーを付与するだけでレート制限・IP ブロック・スパム判定の回避が可能な状態でした。Cloudflare 等の外部 CDN 配下では wp-config.php に SHEDFORM_TRUSTED_PROXY_HEADER の定義が必要です(Shed Turnstile を併用している場合は設定画面に案内が表示されます)。
  • ✦ 調整: WordPress 7.1 での動作確認を反映。
v1.12.3
  • ✦ 調整: スパム保留スコア閾値のデフォルトを 30 → 45 に変更(正規ユーザーの誤保留を低減)。
v1.12.2
  • 🔧 修正: 「初期非表示」に設定したフィールドが、フロントエンドで表示されたりグレーアウト(入力不可)になる問題を修正。初期表示状態をトリガーフィールドの条件ルールから自動導出するようになりました(「のとき表示」ターゲット → 初期非表示、「のとき非表示」ターゲット → 初期表示)。PHP による disabled 属性の付与をやめ、ページロード時の表示・非活性の制御を JS ハンドラーに一本化することで、PHP レンダリングとクライアント側評価の競合を解消しました。
  • 🔧 修正: 同一行に複数フィールドを配置した場合(2カラム配置)、「初期非表示」設定が効かずページ読み込み時に表示されてしまう問題を修正。table・DL・inline の各レイアウトで、複数フィールド行の各列ラッパーに data-shedform-field 属性と display:none を付与し、JS ハンドラーがフィールドごとに表示制御できるようになりました。
  • 🔧 修正: 「入力画面 → 確認画面 → 戻る」で条件分岐フィールドが非表示に戻ってしまう問題を修正。PHP がセッションに保存された入力値を参照してトリガーフィールドの条件を実際に評価することで、確認画面に移動する前に表示されていたフィールドが戻った後も正しく表示されるようになりました。
v1.12.1
  • ✦ 追加: フィールドの条件表示/非表示。select・radio・checkbox フィールドに「この値が選ばれたら他フィールドを表示/非表示にする」ルールを設定できます。訪問者の選択に応じて関連フィールドがリアルタイムで切り替わります。非表示フィールドはバリデーション・確認画面・メール・DB 保存の対象外になります。管理画面の設定 UI はドロップダウンとチェックボックスで操作でき、内部キーの知識は不要です。
v1.12.0
  • ✦ 追加: フォームごとに LINE 通知を設定できるようになりました。LINE Messaging API のチャンネルアクセストークンと送信先ユーザーID を入力し、テンプレート変数でメッセージ本文をカスタマイズできます。テスト送信ボタンで事前確認も可能です。
v1.11.0
  • ✦ 追加: セキュリティタブを新設。Turnstile・スパムスコアリング・レート制限・NGフレーズ/IP・ドメインブロック・会社名ブロックの設定を専用タブにまとめました。
  • ✦ 追加: フォーム複製機能。フォーム一覧から、フィールド・行・設定をすべて含めた状態でフォームを複製できます。複製されたフォームは誤公開を防ぐため非アクティブ状態で作成されます。
  • ✦ 追加: ドメインブロック。メールアドレスのドメインがブロックリストに一致した場合に送信をブロックまたはスコア加算できます。
  • ✦ 追加: 会社名ブロック。指定フィールドの入力値がブロックリストに部分一致した場合に送信をブロックまたはスコア加算できます。
  • 🔧 修正: 有効期限メッセージが未入力の場合、空のラッパー要素が表示される問題を修正。
v1.10.3
  • ✦ 追加: 基本設定タブに「フォームを有効にする」トグルを追加。無効にするとフォームがフロント側に表示されなくなります
  • ✦ 追加: フォーム一覧のステータス列をバッジ表示に変更。有効・受付中・受付前・受付終了・無効を色分けして表示し、期限設定ありの場合は開始/終了日時も表示
v1.10.2
  • ✦ 追加: フォームごとに Google Chat Incoming Webhook 通知を設定できる「通知」タブを追加(Webhook URL・スパム保留通知・メッセージ本文カスタマイズ・テスト送信ボタン)
v1.10.1
  • 🔧 修正: 確認画面・完了画面への遷移後、フォームの位置までスムーズにスクロールするよう修正
v1.10.0
  • ✦ 追加: フォームごとにカラーピッカーで配色を設定できる機能を追加(ラベル背景・文字色・枠線色・バッジ色)
  • ✦ 追加: フォームごとにカスタム CSS を設定できる textarea を追加(基本設定タブ)
  • ✦ 変更: フォームラッパーに data-shedform-id 属性を追加し、複数フォーム設置時のスタイル干渉を防止
  • ✦ 変更: バッジ色を CSS カスタムプロパティ(--shedform-required-bg 等)で定義するよう変更
v1.9.0
  • ✦ 追加: 送信履歴一覧に「全件削除」ボタンを追加(確認ダイアログあり・フォーム絞り込み対応・添付ファイルも削除)
v1.8.1
  • 🔧 修正: 設定タブの TinyMCE エディター内容変更がプレビューに反映されない問題を修正(AddEditor イベントを使用して非同期初期化に対応)
  • 🔧 修正: 離脱警告が保存ボタンのクリックを正しく検知できていなかった問題を修正(メール保存・設定保存・レイアウト保存の全ボタンに対応)
  • ✦ 変更: 新規フォームのデフォルトレイアウトをテーブル型からDL型に変更
  • ✦ 変更: 新規フォームのデフォルト最大幅を800pxから100%に変更
  • ✦ 変更: レイアウト保存ボタンにツールチップを追加し、保存対象の設定項目を明示
v1.8.0
  • 🔧 修正: DL 型・テーブル型フォームのモバイル表示で右端がはみ出す問題を修正(box-sizing: border-box・display: block !important を追加)
  • 🔧 修正: DL 型のモバイル右端はみ出しをさらに修正(overflow:hidden・max-width:100% を row・row-inner・dt・dd に追加、プレビュー body に overflow-x:hidden を追加)
  • 🔧 修正: プレビューペインでスクロールバーの有無によってフォーム幅がぶれる問題を修正(scrollbar-gutter: stable を適用)
  • ✦ 変更: AJAX 接続テストボタンと案内を、フォーム個別ページから「設定」ページに移動
v1.7.23
  • ✦ 追加: フォーム編集画面に AJAX 接続テストボタンを追加(admin-ajax.php への疎通確認ツール)
v1.7.22
  • 🔧 修正: 差出人メールアドレス・Reply-To の保存時に {domain} などのテンプレート変数が消去される問題を修正
v1.7.21
  • 🔧 修正: ファイル添付スロット UI の「ファイルを選択」「このファイルを削除」が JS 内日本語直書きになっていた問題を修正(wp_localize_script 経由に変更)
  • 🔧 修正: 受付終了メッセージのフォールバック文字列を翻訳可能な文字列に変更
  • 🔧 修正: NG フレーズ API URL をフィルター(shedform_phrases_api_url)で上書き可能に変更
v1.7.20
  • 🔧 修正: ファイル削除ボタンが楕円になっていた問題を修正(正円の赤いボタンに変更)
v1.7.19
  • ✦ 改善: ファイル添付 UI をスロット方式に刷新。ファイルごとに個別の入力欄と削除ボタン(×)を表示。上限未満の場合は「+ ファイルを追加」ボタンを表示
v1.7.18
  • ✦ 追加: 受付番号(シリアル番号)のリセット・任意スタート機能。フォーム編集画面の「次の受付番号」欄から変更可能
v1.7.17
  • 🔧 修正: 受付番号の DB 更新後にキャッシュを無効化し、同一リクエスト内で古い値を参照しない問題を修正
  • 🔧 修正: ラジオ・チェックボックスの条件分岐が先頭の選択肢にしか反応しない問題を修正
  • 🔧 修正: 新形式のバリデーション設定で郵便番号自動補完・maxlength が機能しない問題を修正
  • 🔧 修正: 管理画面スパムテストパネルで NG フレーズが未エスケープだった問題を修正(XSS 対策)
  • 🔧 修正: ファイルフィールドの必須バリデーションがサーバー側でスキップされていた問題を修正
  • 🔧 修正: ファイル拒否(種類・サイズ違反)時にエラーなく次の画面へ進んでいた問題を修正
  • 🔧 修正: レート制限カウントの増加タイミングを、セッション検証通過後に変更
v1.7.16
  • 🔧 修正: email_confirm バリデーションで大文字・小文字の違いにより不一致と判定される問題を修正
  • 🔧 修正: POST データからフィールドキーを意図的に除外することで必須バリデーションを回避できる問題を修正
v1.7.14
  • ✦ 追加: セキュリティ設定に「スパム判定を無効にする」オプションを追加(メールアドレスのみのフォーム等で有用)
v1.7.13
  • 🔧 修正: 「日本語なし」スパムスコアの対象をテキスト・テキストエリアフィールドのみに限定(メールアドレス専用フォームで誤判定されていた問題を修正)
v1.7.12
  • 🔧 修正: NG フレーズによるスパムスコアが、フォームごとの設定ではなくデフォルト値を参照していた問題を修正
v1.7.11
  • 🔧 修正: フォームエディターの行追加ボタンとフィールド保存ボタンを連打しても重複登録されないよう制御を追加
v1.7.10
  • 🔧 修正: 同一 IP の繰り返し送信スパムスコアのしきい値が、レートリミットの最大送信回数設定に連動するよう修正(従来はハードコードの 5 件固定)
  • ✦ 追加: スパム判定スコア設定の下に判定の仕組みを説明するガイドを追加
  • 🔧 修正: メールログ全件削除クエリの Plugin Check 警告を phpcs:ignore で抑制
v1.7.9
  • 🔧 修正: 同一ページに同一フォームのショートコードが複数ある場合に確認画面が表示されない問題を修正
v1.7.8
  • 🔧 修正: 同一ページに同一フォームのショートコードが複数ある場合に「セッションが切れました」エラーが発生する問題を修正
  • ✦ 追加: メール送信履歴ページに全件削除ボタンを追加
v1.7.7
  • 🔧 修正: 同一ページに同一フォームのショートコードが複数ある場合に Turnstile トークンが二重送信され timeout-or-duplicate エラーになる問題を修正
v1.7.6
  • 🔧 修正: Shed Turnstile が有効なときの設定ページへのリンクが誤ったスラッグを指していた問題を修正
v1.7.5
  • 🔧 修正: スタック型レイアウトの確認画面でラベル列が正しい幅で表示されない問題を修正
v1.7.4
  • ✦ WordPress 7.0 との互換性を確認
v1.7.3
  • 🔧 修正: 送信データを削除した際にアップロードファイルと DB レコードも合わせて削除するよう修正(個人情報がサーバーに残留するのを防止)
  • 🔧 修正: cron によるファイルクリーンアップが年月サブディレクトリを再帰的にスキャンするよう修正
  • 🔧 修正: メール設定保存ハンドラの冗長な wp_unslash() 呼び出しを削除
  • 🔧 修正: コンソールログのプレフィックスを [WSF] から [Shed Form] に更新
v1.7.2
  • 🔧 修正: dataset 属性名の不一致(wsf → shedform プレフィックス)により郵便番号自動補完・条件分岐・同意スクロールが動作しない問題を修正
  • 🔧 修正: Turnstile 検証失敗時にエラーメッセージを表示せずフォームが再描画される問題を修正
  • 🔧 修正: 設定保存ハンドラの冗長な wp_unslash() 呼び出しを削除
  • 🔧 修正: フォーム削除時に関連する行レコードも削除するよう修正
  • 🔧 修正: error_log() の呼び出しを WP_DEBUG が有効な場合のみ実行するよう変更
  • 🔧 修正: クラウドフレーズの version 値を保存前にサニタイズするよう修正
  • 🔧 修正: 無効な正規表現パターンを含むクラウドフレーズをキャッシュ前にフィルタリング(ReDoS 対策)
  • 🔧 修正: ライセンスヘッダー表記を GPL-2.0-or-later に統一
v1.7.1
  • 🔧 修正: フレーズに正規表現パターンが含まれる場合に NG フレーズリストが保存されない問題を修正(二重 wp_unslash による JSON 破損)
  • 🔧 修正: フレーズ配列が空のとき syncJson() が呼ばれず「全クリア」が反映されない問題を修正
v1.7.0
  • ✦ 追加: フォーム編集ページにショートコードコピーボタンを追加
  • ✦ 追加: フォームごとの最大幅設定(form_max_width)を追加
  • ✦ 追加: デフォルト NG フレーズに「協業」「情報交換」を追加
  • 🔧 変更: NG フレーズの種別ラベルを「完全一致」から「部分一致(含む)」に変更(実際の挙動に合わせて修正)
v1.6.23
  • 🔧 修正: FAQ から特定のアドオン名を削除(現在の提供状況に合わせて更新)
v1.6.22
  • 🔧 修正: サードパーティサービスセクションの WP Shed NG フレーズサービスのプライバシーポリシー URL を修正
v1.6.8
  • ✦ コード品質: ajax_save_field() の JSON フィールド(options/validation/extras)から wp_kses_post() を削除 — 角括弧を含む正規表現パターンが意図せず変換されるのを防止
  • ✦ コード品質: nonce のサニタイズを sanitize_key() から sanitize_text_field() に変更(WPCS 準拠)
  • 🔧 修正: 送信一覧ページの $_GET['status'] 直接参照をサニタイズ済み変数 $filter_status に変更
v1.6.7
  • ✦ セキュリティ: セッショントークンにフォーム ID を紐付け — 別フォームのトークンの流用を防止
  • ✦ セキュリティ: セッショントークンを DB 書き込み後ではなく取得直後に削除 — 最大 1 時間のリプレイ攻撃ウィンドウを解消
  • ✦ セキュリティ: テキストエリアの入力をサーバー側で 20,000 文字に制限 — 過大入力による DoS を防止
  • ✦ セキュリティ: NG ワードのマッチングをフィールド単位でも実施 — 文字列を分割した回避リスクを低減
  • ✦ セキュリティ: 拡張子を複数連ねたファイル名のアップロードを拒否(例: shell.php.jpg)
  • ✦ 追加: ハニーポット隠しフィールド — 不可視フィールドに入力したボットをスパムスコアに関係なくブロック
v1.6.6
  • ✦ セキュリティ: 差出人の表示名を RFC 2047 MIME エンコード(mb_encode_mimeheader)で処理 — マルチバイト文字・特殊文字によるヘッダーインジェクションを防止
  • ✦ セキュリティ: admin_email_to を is_email() で検証し CRLF 除去後に wp_mail() へ渡すよう変更
  • ✦ セキュリティ: 再送メールの CC / BCC を DB から復元後に is_email() で再検証・CRLF 除去
  • ✦ セキュリティ: ajax_download_file() のパスチェックに DIRECTORY_SEPARATOR の末尾を追加 — 隣接ディレクトリへのパス突破を防止
  • ✦ セキュリティ: 管理者通知・自動返信の両メール件名でプラグイン層でも CRLF を除去
  • ✦ パフォーマンス / セキュリティ: CSV エクスポートを 500 件単位のバッチストリーミング方式に変更 — 大量データでのメモリ消費を防止し、キーワードフィルタを SQL 層に移動
v1.6.5
  • 🔧 修正: CSV インジェクション対策 — =・+・-・@ で始まるフィールド値に CSV エクスポート時にシングルクォートを付与
  • ✦ セキュリティ: {page_url} タグを $_SERVER['HTTP_HOST'] から home_url() に変更 — ホストヘッダーインジェクションを防止
  • ✦ セキュリティ: ReDoS 検証をニアミス文字列でも実施。PCRE 制御動詞(*LIMIT_BACKTRACK 等)を保存時に拒否
  • ✦ セキュリティ: 全正規表現ガードに pcre.recursion_limit を追加。try/finally で制限値を確実に復元
  • ✦ セキュリティ: フィールドバリデーションの pattern ルールに ReDoS ガードを適用
  • 🔧 修正: set_attachments() のパスチェックに DIRECTORY_SEPARATOR の末尾を追加 — shedform-uploads プレフィックス突破を防止
  • ✦ セキュリティ: 管理画面ハンドラの残りの $_POST アクセスに wp_unslash() を追加
v1.6.4
  • ✦ セキュリティ: ReDoS 対策 — NG ワード正規表現を長さ 500 文字制限・pcre.backtrack_limit ガードで検証。無効なパターンはスキップし error_log に記録
  • ✦ セキュリティ: X-Forwarded-For IP スプーフィング対策 — プロキシ経由時は最右端の IP を使用
  • ✦ セキュリティ: メール添付ファイルのパストラバーサル防止 — set_attachments() で realpath() により shedform-uploads ベースディレクトリ外を拒否
v1.6.3
  • ✦ セキュリティ: アップロードサブディレクトリ(フォーム ID / 年 / 月)の作成時に .htaccess と index.php 保護を追加
  • ✦ セキュリティ: Content-Disposition ヘッダーを RFC 5987(filename*=UTF-8)形式に変更 — 日本語ファイル名を正しく処理
  • 🔧 修正: ALTER TABLE マイグレーションクエリに phpcs:ignore を追記(ユーザー入力なし・WPCS 準拠)
v1.6.2
  • 🔧 修正: XSS 対策 — {url_param} 動的タグを sanitize_text_field() のみから wp_kses() に変更
  • 🔧 修正: XSS 対策 — {page_title} 動的タグを esc_html() でエスケープ
  • ✦ セキュリティ: ファイルアップロード — finfo_file() 利用不可時は MIME チェックをスキップせずアップロードを拒否
  • ✦ セキュリティ: ファイルアップロード — クライアントの Content-Type ではなく実際の MIME タイプを wp_handle_upload() に渡すよう変更
  • ✦ セキュリティ: ファイルアップロード — $_FILES['size'] ではなくサーバー側で filesize() によりファイルサイズを計測
  • ✦ セキュリティ: フォーム入力処理の全 $_POST アクセスに wp_unslash() を追加(WPCS 準拠)
  • 🔧 修正: 同意フィールドのスクロールコンテンツで二重エスケープを解消(wp_kses_post() 内の冗長な esc_html() を削除)
v1.6.1
  • ✦ プラグインスラッグを shed-form に統一(WordPress.org 申請対応)
v1.6.0
  • ✦ WordPress.org ディレクトリ対応のため GPL-2.0+ ライセンスを追加
  • ✦ wp_add_privacy_policy_content によるプライバシーポリシー提案を追加
  • ✦ readme.txt にサードパーティサービス開示セクションを追加
  • ✦ NG ワードクラウドの更新を自動 cron から手動ボタンへ変更
  • ✦ SortableJS を CDN からローカルバンドルに変更
  • ✦ 国際化対応: すべてのハードコードされた日本語文字列を __() でラップ
  • ✦ .pot ファイルを生成し翻訳サポートを追加
v1.5.4
  • 🔧 修正: 管理者通知・自動返信メールの Reply-To プレースホルダー展開を修正
  • ✦ 改善: フィールドキーのメールプレースホルダー処理を改善
v1.5.3
  • ✦ 追加: スクロールで有効化するコンセントフィールドタイプ
  • ✦ 改善: 設定クラスの静的キャッシュでデータベースクエリを削減
v1.5.1
  • 🔧 修正: Turnstile 認証が完了するまで送信ボタンを無効化
  • ✦ セキュリティ: PHP セッションを WordPress トランジェントとワンタイムトークンに置き換え

よくある質問

インストール・設定

機能・使い方

セキュリティ