Contact Form 7のカスタムバリデーションで片方だけ必須

Contact Form 7はWordPressで最も広く使用されているコンタクトフォームプラグインの一つで、その柔軟性と拡張性により多くのウェブマスターに愛用されています。
しかし、多くの場合、標準的なフォーム機能ではユーザーの特定のニーズを満たせないことがあります。
ここで重要なのが、「カスタムバリデーション」の役割です。


この記事では、Contact Form 7でカスタムバリデーションルールを追加し、より高度なフォーム管理を実現する方法について詳しく解説します。
カスタムバリデーションを使うことで、フォームの入力値をより厳密にチェックし、サイト訪問者からの適切な情報収集を助けることができます。

コンタクトフォーム7の記述

<label>タイトル01
[text text-746]
</label>

<label>タイトル02
[text text-747]
</label>

必須設定の必要はないです。

functions.phpへの記載方法


function my_wpcf7_validate( $result, $tags ) {
	$d1 = isset( $_POST['text-746'] ) ? $_POST['text-746'] : '';
	$d2 = isset( $_POST['text-747'] ) ? $_POST['text-747'] : '';
	if ( $d1 === '' && $d2 === '' ) {
		$result->invalidate( 'text-747', 'どちらか記載してください。' );
	}
	return $result;
}
add_filter( 'wpcf7_validate', 'my_wpcf7_validate', 11, 2 );

変更方法

text-746、ext-747はどちらか一方必須にしたい部分の内容を記載します。

$result->invalidate( ‘text-747’, ‘どちらか記載してください。’ );
どちらに入力もれのアラートを出すかを指定します。
確認画面などの設定がある場合はエラーになる可能性があります。

フィルターフック一覧

名称概要
wpcf7_acceptanceフォームの受け入れを許可するかどうかを返す
wpcf7_additional_mail送信先メールアドレスを追加する
wpcf7_admin_menu_change_noticeメニューにバッチで表示する通知の数を設定する
wpcf7_ajax_json_echoREST API で利用する
wpcf7_ajax_onloadREST API で利用する
wpcf7_akismet_comment_checkakismet がコメントをスパムと判断した時の処理を追加する
wpcf7_autop_or_notWPCF7_AUTOP 定数を上書きする
wpcf7_captcha_urlキャプチャの URL を上書きする
wpcf7_collect_mail_tags独自のメールタグを設定する
wpcf7_constant_contact_\ contact_post_request_builderConstant Contact との連携で利用する
wpcf7_constant_contact_submitConstant Contact との連携で利用する
wpcf7_contact_form_default_packフォームのテンプレートを加工する
wpcf7_contact_form_propertiesフォームのプロパティを拡張する
wpcf7_contact_form_shortcode投稿に埋め込むショートコードを加工する
wpcf7_copyフォームのコピーを加工する
wpcf7_default_template各設定項目のデフォルト値を加工する
wpcf7_display_messageメッセージの出力を加工する
wpcf7_editor_panels管理画面のパネル(タブ)を加工する
wpcf7_flamingo_get_valueFlamingo との連携で利用する
wpcf7_flamingo_submit_ifFlamingo との連携で利用する
wpcf7_form_action_url<form>タグの action 属性を加工する
wpcf7_form_autocomplete<form>タグの autocomplete 属性を加工する
wpcf7_form_class_attr<form>タグの class 属性を加工する
wpcf7_form_elements<form>要素に要素を加える
wpcf7_form_enctype<form>タグの enctype 属性を加工する
wpcf7_form_hidden_fields<form>要素に <input type="hidden"> の要素を加える
wpcf7_form_id_attr<form>タグの class 属性を加工する
wpcf7_form_name_attr<form>タグの name 属性を加工する
wpcf7_form_novalidate<from>タグの novalidate 属性を加工する
wpcf7_form_response_output応答メッセージの出力を加工する
wpcf7_form_tagタグの値を加工する
wpcf7_form_tag_data_option独自タグの選択肢を指定する
wpcf7_is_date入力文字列が日付かどうかを返す
wpcf7_is_email入力文字列がメールアドレスかどうかを返す
wpcf7_is_number入力文字列が数値かどうかを返す
wpcf7_is_tel入力文字列が電話番号かどうかを返す
wpcf7_is_url入力文字列が URL かどうかを返す
wpcf7_load_cssWPCF7_LOAD_CSS 定数を上書きする
wpcf7_load_jsWPCF7_LOAD_JS 定数を上書きする
wpcf7_log_remote_requestログ出力内容を加工する
wpcf7_mail_components送信するメールの内容を加工する
wpcf7_mail_html_footerHTML メールのフッタを加工する
wpcf7_mail_html_headerHTML メールのヘツダを加工する
wpcf7_mail_tag_replacedメールに出力する要素を加工する
wpcf7_mail_tag_replaced_{$type}メールに出力する要素を加工する(type 属性単位)
wpcf7_map_meta_capフォームの編集権限を上書きする
wpcf7_messagesメッセージ文字列を加工する
wpcf7_posted_data入力された要素を加工する
wpcf7_posted_data_{$type}入力された要素を加工する(type 属性単位)
wpcf7_recaptcha_actionsreCAPTCHA で利用する
wpcf7_recaptcha_secretreCAPTCHA のシークレットキーを上書きする
wpcf7_recaptcha_sitekeyreCAPTCHA のサイトキーを上書きする
wpcf7_recaptcha_thresholdreCAPTCHA のスパム判定の重み付けを上書きする
wpcf7_recaptcha_verify_responsereCAPTCHA で人間による投稿かどうかの判定を上書きする
wpcf7_remote_ip_addrリモートホストの IP アドレスを上書きする
wpcf7_skip_mailメール送信を省略するかどうかのフラグを上書きする
wpcf7_spamスパム判定の結果を上書きする
wpcf7_special_mail_tags特別なメールタグの値を生成する
wpcf7_submission_is_blacklistedブラックリストを上書きする
wpcf7_subscribers_only_noticeログインユーザーのみに許可されたフォームが利用された時の警告文を上書きする
wpcf7_support_html5html5 をサポートするかどうかを指定する
wpcf7_support_html5_fallbackhtml5 用のフォールバック機能を有効にするかどうかを指定する
wpcf7_upload_dirアップロードディレクトリ情報を上書きする
wpcf7_upload_file_nameアップロードされたファイルの名前を上書きする
wpcf7_use_really_simple_captchaWPCF7_USE_REALLY_SIMPLE_CAPTCHA 定数を上書きする
wpcf7_validateバリデーションチェックの結果を上書きする
wpcf7_validate_configurationWPCF7_VALIDATE_CONFIGURATION 定数を上書きする
wpcf7_validate_{$type}”バリデーションチェックの結果を上書きする(type 属性単位)
wpcf7_validation_errorバリデーションチェックエラーのメッセージを上書きする
wpcf7_verify_nonceWPCF7_VERIFY_NONCE 定数を上書きする

アクションフック一覧

名称概要
wpcf7_admin_footer管理画面のフッター出力時
wpcf7_admin_init管理画面へのアクセス時
wpcf7_admin_load管理サブメニューの設定後
wpcf7_admin_menu管理メニューの設定前
wpcf7_admin_misc_pub_section追加のペインの出力時
wpcf7_admin_notices管理画面に通知を表示する時
wpcf7_admin_warnings管理画面に警告を表示する時
wpcf7_after_create管理画面でフォームの設定を作成した後
wpcf7_after_flamingoFlamingo との連携で利用する
wpcf7_after_save保存処理の後
wpcf7_after_update管理画面でフォームの設定を更新した後
wpcf7_before_send_mailメールの送信前
wpcf7_config_validator_validate管理画面の設定項目のバリデーションチェック中
wpcf7_contact_formWPCF7_ContactForm クラスオブジェクトの構築後
wpcf7_enqueue_scriptsスクリプトのエンキュー時
wpcf7_enqueue_stylesスタイルシートのエンキュー時
wpcf7_init初期化時
wpcf7_mail_failedメール送信の失敗時
wpcf7_mail_sentメール送信の成功時
wpcf7_post_edit_form_tagフォームの設定用フォームの<form>タグ出力時
wpcf7_save_contact_formフォームの設定を保存する前
wpcf7_submitフォーム送信時
wpcf7_upgradeContact Form 7 のアップデート時

まとめ

この記事を通じて、Contact Form 7のカスタムバリデーションの実装方法について学びました。カスタムバリデーションを活用することで、フォームからの入力をより効果的に制御し、ウェブサイトのユーザーエクスペリエンスを向上させることができます。カスタムバリデーションを使用する際は、具体的なユーザーのニーズに合わせて、ルールを慎重に設計することが重要です。

また、エラーメッセージは明確でユーザーフレンドリーであるべきです。このようにして、Contact Form 7を使って、より機能的で、ユーザーニーズに応えるフォームを作成しましょう。今後もこのようなカスタマイズを通じて、ウェブサイトの機能性を高め、訪問者とのコミュニケーションをよりスムーズにすることを目指してください。