お問い合わせはコチラから

【最新版】Contact form 7 エラーメッセージを変更する方法【コピペ可能】

サイト運営

Contact form 7では、validationエラーのメッセージの変更が可能ですが、項目ごと(name属性ごと)の変更は設定画面からできません。

特別のカスタマイズを行わない限り、同一のフォームタグのエラーメッセージは全て同じになります。

項目ごとにエラーメッセージを変更したい!

そう思って検索すると、エラーメッセージの変更方法は出てきますが、内容が古かったりそもそも使えないものが多かったです。

色々調べて簡単に変更する方法を見つけました。

この記事では、最新のContact form 7のvalidationエラーのメッセージの変更方法について説明します。

Contact form 7のメッセージ表示位置の変更と組み合わせて、この記事を読むことで好きな位置に好きなメッセージを表示することができるようになります。

Contact form 7のエラーメッセージの変更方法は?

Contact form 7のエラーメッセージの変更は簡単にできるのかな?と思って検索しましたが、なかなかそのものズバリという内容がありませんでした。

Contact form 7のエラーメッセージを変更する方法を検索すいると、以下の記事が見つかります。

その通りにやってもうまくいきませんでした。

上記の方法は、公式で否定されています。

WPCF7_ContactForm::validation_error() は非 Ajax のフォーム送信において使われるものですので Ajax 送信には何ら関与しません。動作しないのはそのためかと思います。

項目に基づいてエラーメッセージを変えたいのでしたらカスタムバリデーションを定義するのが最適な方法です。試してみてください。

Custom validation

https://ja.wordpress.org/support/topic/%E3%80%90wordpress%E3%80%91contact-form-7-%E3%81%AE%E3%83%95%E3%83%83%E3%82%AF%E3%81%8C%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82/

Contact form7のメッセージの変更にはカスタムバリデーションが必要

項目に基づいてエラーメッセージを変えたい場合は、カスタムバリデーションが必要と言われてもピンときませんでした。

本来、カスタムバリデーションとはバリデーション自体を変更したり、追加するためのものだと思います。

というのも、カスタムバリデーションの説明の記事には、『メールアドレスの不一致判定の例』しかなく、単純に既存のメッセージを変更したい場合の簡単な例がないからです。

バリデーション後にメッセージを出力する部分を変更すればメッセージを変更できるのはわかりました。

しかし、メッセージを変更するためだけに、バリデーション自体も記述しないといけないのが課題になります。

バリデーションの内容は変更せず、メッセージだけ変更したい

いちいち、バリデーションを書くのは時間の無駄です。

答えは簡単です。

Contact form7のバリデーションチェックを本家からコピーする、です。

同じ仕組みを使っている本家のソースコードから、拝借してくるのが一番安全で簡単なはずです。

カスタムバリデーションのフックは、wpcf7_validate_{formタグ名}です。

Contact form 7のソースコードはgithubに公開されています。ソースコードをフック名で検索するとバリデーション処理が見つかります。

例えば、チェックボックスのバリデーションの場合は、wpcf7_validate_checkboxでソースを検索すると以下のようにバリデーションチェックの処理が見つかります。

/* Validation filter */

add_filter( 'wpcf7_validate_checkbox',
	'wpcf7_checkbox_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_checkbox*',
	'wpcf7_checkbox_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_radio',
	'wpcf7_checkbox_validation_filter', 10, 2 );

function wpcf7_checkbox_validation_filter( $result, $tag ) {
	$name = $tag->name;
	$is_required = $tag->is_required() || 'radio' == $tag->type;
	$value = isset( $_POST[$name] ) ? (array) $_POST[$name] : array();

	if ( $is_required and empty( $value ) ) {
		$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
	}

	return $result;
}

基本、本家のフック関数をそのまま使ってメッセージ部分だけ好きな文言に変更するのが一番簡単です。

例:checkboxのカスタムバリデーションでエラーメッセージを変更する

checkboxのフォームタグでname属性がcatalogの場合で説明します。

以下のように$nameにname属性(catalog)を指定することで、catalogに項目を絞ってメッセージを変更することができます。

フォームタグの絞り込み(checkboxかどうか)は、フック名(wpcf7_validate_checkbox)に含まれていますので、特に判定不要です。

// contact form 7 バリデーション追加
function custom_catalog_confirmation_validation_filter($result, $tag)
{
	$name = $tag->name;
	$is_required = $tag->is_required() ;
	$value = isset( $_POST[$name] ) ? (array) $_POST[$name] : array();

	if ( $is_required and empty( $value ) && $name == 'catalog') {
		$result->invalidate( $tag, '一つ以上選択してください' );
	}
  return $result;
}

add_filter( 'wpcf7_validate_checkbox*', 'custom_catalog_confirmation_validation_filter', 9, 2 );

既存のエラーメッセージを変更する場合は、filterフックのpriorityをオリジナルと同じ(10)か、それより小さくしないと有効になりません。

オリジナルのvalidationでエラーになった時点でメッセージが表示されて、それ以降のPriorityのvalidationのメッセージは表示されないためです。オリジナルよりも優先順位を上げる(小さくする)必要があります。

emailアドレスの確認などは、email入力欄の未入力をチェックして、そのあとにメールアドレスの一致を確認するので、オリジナルよりもPriorityは低い(大きい)わけです。

まとめ

Contact form7 のカスタムバリデーションを使用した、エラーメッセージの変更方法について説明しました。

メッセージだけを変更したい時でもバリデーションルールを記載しなければならないので、Contact form 7のソースを拝借してくると、誰でも簡単にメッセージを変更できますよ、という内容でした。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました