Webサイト制作で頻繁に利用されるWordPressのフォームプラグイン「MW WP Form」。
非常に高機能で便利な一方、多数のフォームを運用する場面で、ある課題に直面することがあります。
それは、エラーメッセージの管理です。
例えば、イベントごとに参加申し込みフォームを複製して使ったり、複数のサービスごとにお問い合わせフォームを用意したりする場合、フォームごとに同じ内容のエラーメッセージを設定するのは非常に手間がかかります。
さらに、後からメッセージの文言を修正したくなった場合、全てのフォームを一つひとつ修正しなければならず、設定漏れのリスクも高まります。
この記事では、そんな悩みを解決するために、データベース(DB)からMW WP Formで作成された全てのフォーム情報を取得し、共通のエラーメッセージを動的に設定するという、スマートな方法を詳しく解説します。
なぜエラーメッセージの共通化が難しいのか?
通常、MW WP Formで特定フォームのエラーメッセージをカスタマイズするには、functions.phpに以下のようなフィルターフックを記述します。
// 'mw-wp-form-123'の部分がフォームのキー
add_filter('mwform_error_message_mw-wp-form-123', 'my_error_message_function', 10, 3);このmw-wp-form-123というformkeyは、フォームの投稿IDに依存しています。つまり、フォームを複製すると新しい投稿IDが割り当てられ、formkeyもmw-wp-form-456のように変わってしまいます。
そのため、フォームが増えるたびに新しいadd_filterを追記する必要があり、コードが冗長になり、メンテナンス性が著しく低下してしまうのです。
解決策:DBから全フォームキーを取得して一括設定する
この問題を解決するのが、今回ご紹介するコードです。
このコードは、以下の2つの関数で構成されています。
get_all_form_key(): WordPressのデータベースを検索し、MW WP Formで作成された全てのフォームのIDを取得して、それぞれにエラーメッセージ用のフィルターフックを自動で追加する関数。form_error_message(): 実際に表示されるエラーメッセージの内容を定義する関数。
この仕組みにより、一度コードを設置すれば、今後いくつフォームを複製しても、自動的に共通のエラーメッセージが適用されるようになります。
実装コードと詳細解説
使用しているテーマのfunctions.phpに、以下のコードを追記してください。
/**
* MW WP Form のエラーメッセージをカスタマイズする
*
* @param string $error デフォルトのエラーメッセージ
* @param string $key name属性の値
* @param string $rule バリデーションルール
* @return string カスタマイズしたエラーメッセージ
*/
function form_error_message( $error, $key, $rule ) {
// --- 必須選択項目(ラジオボタン、チェックボックスなど)---
// 'required'ルールが適用される項目名を配列で指定
$required_items = [
'お問い合わせ種別',
'ご希望の連絡方法',
];
foreach ( $required_items as $value ) {
if ( $key === $value && $rule === 'required' ) {
return $value . 'を選択してください';
}
}
// --- 必須入力項目(テキストフィールドなど)---
// 'noempty'ルールが適用される項目名を配列で指定
$noempty_items = [
'お名前',
'フリガナ',
'郵便番号',
'市区町村',
'丁目番地',
'電話番号',
'メールアドレス',
'メールアドレス(確認用)',
'お問い合わせ内容',
];
foreach ( $noempty_items as $value ) {
if ( $key === $value && $rule === 'noempty' ) {
return $value . 'は必須項目です';
}
}
// --- カタカナ入力項目 ---
$katakana_items = [
'フリガナ',
];
foreach ( $katakana_items as $value ) {
if ( $key === $value && $rule === 'katakana' ) {
return $value . 'はカタカナで入力してください';
}
}
// --- 特定の項目に対する個別のルール ---
if ( $key === 'メールアドレス' && $rule === 'mail' ) {
return '正しいメールアドレスの形式で入力してください。';
}
if ( $key === 'メールアドレス(確認用)' && $rule === 'eq' ) {
return 'メールアドレスが一致しません。';
}
// 上記のどの条件にも当てはまらない場合は、デフォルトのエラーメッセージを返す
return $error;
}
/**
* MW WP Form で作成された全てのフォームキーを取得し、
* 共通のエラーメッセージ用フィルターフックを適用する
*/
function get_all_form_key() {
global $wpdb; // WordPressのDB操作用グローバル変数
// postmetaテーブルから、meta_keyが 'mw-wp-form' のレコードを全て取得
$rows = $wpdb->get_results( "
SELECT post_id
FROM $wpdb->postmeta
WHERE `meta_key` = 'mw-wp-form'
" );
// 取得した各フォーム情報に対してループ処理
foreach ( $rows as $row ) {
// 'mwform_error_message_mw-wp-form-{投稿ID}' というフック名を作成し、フィルターを追加
add_filter( 'mwform_error_message_mw-wp-form-' . $row->post_id, 'form_error_message', 10, 3 );
}
}
// 関数を実行
get_all_form_key();コードのポイント解説
get_all_form_key()関数:global $wpdb;: WordPressのデータベースを操作するための必須のおまじないです。$wpdb->get_results(...):postmetaテーブルを検索しています。MW WP Formは、作成したフォームの情報をこのテーブルにmeta_key = 'mw-wp-form'として保存しています。SELECT post_id: フォームの投稿IDのみを取得しています。foreach ($rows as $row): 見つかった全てのフォームに対して処理を繰り返します。add_filter(...):mwform_error_message_mw-wp-form-に取得した$row->post_idを連結し、動的にフック名を作り出しています。これにより、全てのフォームにform_error_message関数が適用されます。
form_error_message()関数:- 引数の
$keyにはフォーム項目のname属性の値が、$ruleには設定したバリデーションルール(required,noemptyなど)が入ります。 $required_itemsや$noempty_itemsのように、ルールごとに項目名を配列で管理することで、コードの見通しが良くなり、後からの追加や修正が容易になります。- 例えば、「お名前」欄が空欄だった場合、
$keyは「お名前」、$ruleは「noempty」となるため、if ( $key === $value && $rule === 'noempty' )の条件に一致し、「お名前は必須項目です」というメッセージが返されます。
- 引数の
カスタマイズして使ってみよう
新しい項目を追加する$noempty_itemsの配列に、新しく必須項目にしたいフォーム項目のname属性の値(例: 会社名)を追加するだけです。
$noempty_items = [
'お名前',
'フリガナ',
'会社名', // ←追加
// ...
];エラーメッセージの文言を変更するreturnされている文字列を自由に変更してください。
// 変更前
return $value . 'は必須項目です';
// 変更後
return '【入力必須】' . $value . 'をご入力ください';新しいルールを追加する
例えば、電話番号(tel)用のバリデーションルールを追加したい場合は、以下のように追記します。
// ...
if ( $key === '電話番号' && $rule === 'tel' ) {
return '正しい電話番号の形式(ハイフンなし)で入力してください。';
}
if ( $key === 'メールアドレス' && $rule === 'mail' ) {
// ...まとめ
今回は、MW WP Formで大量のフォームを効率的に管理するため、エラーメッセージを共通化するテクニックをご紹介しました。
この方法のメリットは以下の通りです。
- メンテナンス性の向上: エラーメッセージの修正や追加が1ヶ所で完了します。
- コードのDRY(Don’t Repeat Yourself)原則: 同じコードを繰り返し書く必要がなくなります。
- ヒューマンエラーの防止: フォームごとの設定漏れや、メッセージの不統一がなくなります。
多くのフォームを運用するサイトや、今後フォームが増える可能性のあるプロジェクトでは、非常に効果的な手法です。ぜひ、あなたの開発現場でも活用してみてください。




