【reCAPTCHA v3】WordPressで特定ページのみ表示させる方法

スパム対策として、reCAPTCHA v3を使うことは多くなりました。いろいろなサイトで画面右下に表示されるreCAPTCHA v3のマークをよく見かけます。ちなみに、このページの右下にもあります。

WordPressのContactForm7で「reCAPTCHA v3」を設定することが多いのですが、その場合、全ページに対応されます。

よって、今回はWordPressのContactForm7で「reCAPTCHA v3」を設定した場合、特定のページのみ「reCAPTCHA v3」が反映させる方法をご紹介します。

▼Wordpress-ContactForm7で「reCAPTCHA v3」を設定する方法はこちら

「reCAPTCHA v3」を特定の固定ページのみへ適応させる方法

まずは、基本的な方法からです。後ほど様々なパターンについても考察していますので、ご自身にあった設定方法を見つけてみてください。

編集するファイルはテーマ内の「function.php」です。

下記ソースを「function.php」の末尾(「?>」よりは前)に追記すれば、指定の固定ページのみ(下記の場合「contact」と「apply」)reCAPTCHA v3を適応させることができます

/*----------------------------------------------------
 recaptcha
----------------------------------------------------*/
add_action('wp_enqueue_scripts', function() {
  // recaptchaを表示させたい固定ページの slug を指定します。複数OK
  $page_list = [
    'contact', // お問い合わせフォーム
    'apply', // 応募フォーム
  ];
  if(is_page($page_list)) return;
  wp_deregister_script('google-recaptcha');
});

簡単に説明

add_action('wp_enqueue_scripts', function() {

⇒ここは掘り下げないでおきます。こういうものだと思ってください。

$page_list = [
  'contact', // お問い合わせフォーム
  'apply', // 応募フォーム
];

⇒ここが一番重要です。あなたがreCAPTCHA v3を適応させたい固定ページのslugを指定してください。配列で複数指定可能です。

if(is_page($page_list)) return;

⇒ここで処理を抜かしています。この次の処理でreCAPTCHA v3のを止めるので、それをさせないためです。

wp_deregister_script('google-recaptcha');

⇒google-recaptchaで登録されたスクリプトを解除しています。

ここが要です

wp_deregister_script('google-recaptcha');

↑この処理で「reCAPTCHA v3」の適応を解除できるので、どういったページかを判定して、wp_deregister_scriptの処理をコントロールすれば、適応させるもさせないも自由自在です。

では、いくつか用途が多そうなパターンを掲載しておきます。

「reCAPTCHA v3」をトップページのみへ適応させる方法

/*----------------------------------------------------
 recaptcha
----------------------------------------------------*/
add_action('wp_enqueue_scripts', function() {
  if(is_home() || is_front_page()) return;
  wp_deregister_script('google-recaptcha');
});

トップページの場合は、「is_home()」または「is_front_page()」でOKです。

「reCAPTCHA v3」を特定の投稿ページのみへ適応させる方法

/*----------------------------------------------------
 recaptcha
----------------------------------------------------*/
add_action('wp_enqueue_scripts', function() {
  $single_list = [
    'てすと',
    'test',
  ];
  if(is_single($single_list)) return;
  wp_deregister_script('google-recaptcha');
});

投稿ページの場合は、固定ページのときとほとんど同じです。投稿のslugを指定すればOKです。

また、slugは日本語を指定している場合でも動作確認ができました。ただし、確実なのは半角英数字だと思います。

「reCAPTCHA v3」をトップページまたは特定の固定ページのみへ適応させる方法

/*----------------------------------------------------
 recaptcha
----------------------------------------------------*/
add_action('wp_enqueue_scripts', function() {
  // recaptchaを表示させたい固定ページの slug を指定します。複数OK
  $page_list = [
    'contact', // お問い合わせフォーム
    'apply', // 応募フォーム
  ];
  if(is_home() || is_front_page()) return;
  if(is_page($page_list)) return;
  wp_deregister_script('google-recaptcha');
});

二つの条件ともにreturnすれば、トップページまたは特定の固定ページのみへ適応させることも可能です。

「reCAPTCHA v3」を特定の固定ページ以外へ適応させる方法

/*----------------------------------------------------
 recaptcha
----------------------------------------------------*/
add_action('wp_enqueue_scripts', function() {
  // recaptchaを表示させたい固定ページの slug を指定します。複数OK
  $page_list = [
    'contact', // お問い合わせフォーム
    'apply', // 応募フォーム
  ];
  if(is_page($page_list)) wp_deregister_script('google-recaptcha');
});

今までとは反対に特定の固定ページのみ「wp_deregister_script(‘google-recaptcha’)」を処理すれば、指定した固定ページ以外にreCAPTCHA v3を適応させることもできます。あまり需要はない気はしますが…。

まとめ

  • 「wp_deregister_script(‘google-recaptcha’)」を処理して、reCAPTCHA v3が不要なページは適応外にしよう
  • 今回ご紹介した条件以外のパターンも簡単に実装可能

僕もお客さんのサイトを作成するときには大体reCAPTCHA v3を対応するのですが、フォームがあるページだけ対応してほしいという要望が多くあります。

そういったときは本記事の内容で対応しています。自分のサイトでもお客さんのサイトでも、必要な場合は是非お試しください。簡単に実装できるかと思います。

もし、実現したいが方法が分からない場合はコメントください。出来る範囲ではありますが、試してみます。