Codeworks Notes

 2024-03-05

 2024-12-23

Webのメモ
フロントエンド

reCAPTCHA v3 の使い方

サイトのお問い合わせフォームでスパム対策にreCAPTCHA3を使いたいっていうときの設定方法。

Google reCAPTCHAへ登録する

Web サイトと連携するためにサイトキーが必要になるのでGoogleログイン後に以下のサイトからサイトを登録してキーを取得します。

Google reCAPTCHA - 新しいサイトを登録する

ラベル名つけて対象のドメインを入力。
送信ボタンを押すとサイトキーとシークレットキーが発行されます。

設置する(手動編)

最初にAPI を読み込んで、トークン処理のコールバック関数を追加します。

<script src="https://www.google.com/recaptcha/api.js"></script>
<script>
  function onSubmit(token) {
    document.getElementById("form-Id").submit();
  }
 </script>

次にフォームへ属性を追加します。
"form-Id" は先の form-Id と揃え、"reCAPTCHA_site_key" は 発行されたサイトキーを入れればOK。

<form id="form-Id">
  <button class="g-recaptcha" 
    data-sitekey="reCAPTCHA_site_key" 
    data-callback='onSubmit' 
    data-action='submit'>Submit</button>
</form>

設置する(Contact Form 7 編)

WordPress サイトで Contact Form 7 を利用している場合はもっとシンプルです。設定からキーを入力するだけ。

reCAPTCHA ロゴバッジを非表示にする場合

reCAPTCHA を適用すると reCAPTCHA ロゴのバッジが表示されます。

これを非表示にする場合は以下のように対応してください。

まず一文加える

本サイトはreCAPTCHAによって保護されています。Googleの<a href="https://policies.google.com/privacy" target="_blank">プライバシーポリシー</a>と<a href="https://policies.google.com/terms" target="_blank">利用規約</a>が適用されます。

CSSでバッジを非表示にする

.grecaptcha-badge { visibility: hidden; }

以上、こんな感じで設定します。

非フォームページでreCAPTCHAを読み込ませたくない場合

Contact Form 7 のインテグレーションでキーを設定した場合、すべてのページで reCAPTCHA 3 が読み込まれるようになり、サイトの読み込み速度に影響が出ます。

実際のところ、reCAPTCHAが仕事して欲しいのはフォームページであり、その他のページでは稼働する必要がないので、特定のページ以外では reCAPTHCHA を読み込まないように Contact Form 7 をフックしておくといい。

// フォームページのみreCAPTCHAv3を読み込む(Contact Form 7)
function google_recaptcha_v3() {
	if (!is_page('contact')) {
		wp_deregister_script('google-recaptcha');
	}
}
add_action('wp_enqueue_scripts', 'google_recaptcha_v3', 99);
?>

フォームページが複数ある場合は is_page() の引数を配列にすれば OK 。