はじめに
Contact Form 7 は、仕様上、お問い合わせページだけでなく、
サイトトップなど全ページで読み込まれます。
これは Contact Form 7 Google ReCAPTCHA V3 も同様でして、
全ページで読み込まれます。
何が問題か
お問い合わせページでない、普通のページのリクエストでもReCAPTCHAが動くため、
余計なリクエスト数がカウントされます。
これにより、普通にお問い合わせを行ってもスパム認定される場合があるほか、
ReCAPTCHAの無料枠が月1万リクエストであるため、
それを超えると正常に判定されなくなったり、課金対象になったりします。
そのため、Contact Form 7 も ReCAPTCHA も、
特定のページでだけ読み込ませるような対策が必須になります。
実装
functions.php
に、以下のような記述を追加してください。
functions.php
/**
* Contact Form 7 をお問い合わせページだけで読み込むようにする
* これをしないと ReCAPTCHA も全ページで読み込まれてしまい
* 余計なリクエストが発生するため
*/
function cf7_enqueue_scripts_and_styles()
{
// CF7を読み込ませる固定ページを定義する
$pages = ['contact','entry'];
if (is_page($pages)){
if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
wpcf7_enqueue_scripts();
}
if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
wpcf7_enqueue_styles();
}
}
else {
wp_deregister_script('google-recaptcha');
wp_deregister_script('wpcf7-recaptcha');
}
}
add_filter('wpcf7_load_js', '__return_false');
add_filter('wpcf7_load_css', '__return_false');
add_action('wp_enqueue_scripts', 'cf7_enqueue_scripts_and_styles', 100, 0);
動作確認方法
- お問い合わせページでF12キーを押して開発者ツールを開き、要素タブを開きます
- Ctrl + Fキーを押して検索バーを出し、「contact-form-7」や「recaptcha」で検索します
- 想定通りのライブラリが読み込まれていることを確認します
- サイトトップなど、ライブラリを読み込みたくないページで1~2の手順を実行します
- ライブラリが読み込まれていないことを確認します
参考URL