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

【最新版】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のソースを拝借してくると、誰でも簡単にメッセージを変更できますよ、という内容でした。

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