【CONTACT FORM7】フォームがなければreCAPTCHAを非表示にするカスタマイズ

WordPressでは言わずと知れた問い合わせフォームプラグインの「CONTACT FORM7」ですが、セキュリティ対策として、GoogleのreCAPTCHAを利用している人も少なくないと思います。

reCAPTCHAの導入方法については様々なサイトで紹介されているのでググってもらうとして、このreCAPTCHAは導入は簡単だけど、全ページに表示されてしまうという問題があります。(※ここではあえて問題と読んでいます)

問い合わせページだけで表示させたいというのが本音かなと思い、以前このような記事を紹介しました。

上の記事の内容は、ページIDやスラッグを指定してそれ以外のページでのreCAPTCHAの表示をキャンセルするというもの

問い合わせページの1ページのみの場合はこの方法で全く問題ないのですが、問い合わせフォームをたくさんのページに設置ている場合は、上の記事の方法は非常に効率が悪く非現実的。

前置きが長くなってしまったけど、今回はもっと自動化することにします。

つまり、「CONTACT FORM7のショートコードが存在していたらreCAPTCHAを読み込まない」ようにすることができるカスタマイズを紹介します。

ショートコードが存在していたらreCAPTCHAを読み込まないようにするためのコード

結論としては、以下のコードをfunctions.phpなどテーマファイルに書き込みます。

//ショートコードが存在しなければreCAPTCHAの読み込みをキャンセルする
add_action( 'wp_enqueue_scripts', function (){
	
	global $post;
	$valid_recaptcha = false;
	$content = get_post()->post_content;
	
	if($content != null){
		if(has_shortcode($content, 'contact-form-7')) {
			$valid_recaptcha = true;	 
		}		
	}
	
	if($valid_recaptcha == false){
		wp_deregister_script( 'google-recaptcha' );
	}
	
}, 100);

これによって、CONTACT FORM7のショートコードが記載されているページ以外ではreCAPTCHAが非表示(出力されない)になります。

これで問題解決♪

…とはならない場合があるので、ご注意を。

ウィジェットに設置してたりすると機能しない

上の方法は、あくまで記事内にショートコードがある場合(本文に設置している場合)であって、ウィジェットなどにショートコードがある場合は対象外となってしまいます。

というわけで、その対処法については、、、、長くなるので別の記事で紹介したいと思います。