WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

【Contact Form 7】フォームのIDを取得する

フォームのプラグイン「Contact Form 7」のバリデーション時に、自分のフォームのIDを取得する方法のご紹介です。
項目は同じなんだけど表示するページが異なるので同じフォームを複製して分けている、といったケースで、表示するページによって項目に対するバリデーションルールを変えたい場合などに使えます。

Contact Form 7のバリデーションフィルター関数 wpcf7_validate では、フォームが埋め込まれているページの情報を取得することができないようです。global $post が取れませんでした。そのため、すぐ思いつく is_page でページ指定して条件を付けるとか、$post->ID でページの投稿IDを取得して特定のページだった時に条件を付けるとか、そういうよく使うソリューションは使えません。
そこで、ページの投稿IDの代わりに、Contact Form 7のフォームの投稿IDを取得して、そのIDの値で条件を付けるという方法をとります。

フォームの投稿IDは管理画面でContact Form 7の対象のフォーム編集画面を開き、URLを見ればわかります。
https://100webdesign.jp/wp-admin/admin.php?page=wpcf7&post=XXXX&action=edit
ここでいう「XXXX」が投稿IDです。
この投稿IDを使います。

add_filter('wpcf7_validate', 'wpcf7_validate_customize', 11, 2);
function wpcf7_validate_customize($result, $tags){
  $contact_form = WPCF7_ContactForm::get_current(); //自分のフォームの情報を取得
  $contact_form_id = $contact_form -> id; //自分のフォームのpostIDを取得

  if($contact_form_id == XXXX){ //フォームのIDを指定する
    //特定のバリデーションルールを記述する
  }
  return $result;
}

という感じです。
 
私も知らなかったので個人的な備忘録としても残しておきます。
 
 
フォームプラグイン「Contact Form 7」のバリデーションカスタマイズやフォームの内容を変化させる方法について、過去にもいくつか事例を紹介してますので、興味あれば。

Contact Form 7 のバリデーションのカスタマイズ
https://100webdesign.jp/services/wordpress/wp_result/wp_result-21586/

【Contact Form 7】フォームの特定の項目の入力内容によって、別の任意入力項目を必須に切り替える
https://100webdesign.jp/services/wordpress/wp_result/wp_result-22589/

フォームの選択項目によって、他の項目の表示/非表示や必須/任意を切り替える
https://100webdesign.jp/services/wordpress/wp_result/wp_result-24245/

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!