😎

WordPressでreCAPTCHAを特定のページ以外では読み込まない方法

2024/03/31に公開

Googleが提供するreCAPTCHAはお問い合わせフォーム等のスパム対策に導入されているが、デフォルトでは全ページで読み込まれてしまい、サイトが遅くなる原因となる。

・理想:必要なページのみreCAPTCHAを読み込む(大抵数ページしかない)
・現実:全ページで読み込まれてしまう(reCAPTCHA側はどのページにフォームがあるかわからないので全ページで実行しようとする)
というわけだ。

公式説明:必要な場合だけ JavaScript とスタイルシートをロードさせるには | Contact Form 7

しかし、functions.phpを触れる人であれば、この問題は回避可能。デフォルトでは全ページで読み込まれるので、除外条件を指定して、dequeueで読み込みを停止する。

reCAPTCHA単体を無効にする場合

ここでは、トップページならreCAPTCHAを読み込まない設定。除外条件は適宜書き換えてください。

/* reCapchaを入れると遅くなるので、フォームがあるページ以外では読み込まない */
function custom_disable_recapcha_script() {
    if (is_front_page()) {
        wp_dequeue_script('google-recaptcha');
    }
}
add_action('wp_enqueue_scripts', 'custom_disable_recapcha_script', 100);

Contact Form 7関連リソースも無効にする場合

Contact Form 7プラグインには、reCAPTCHA連携機能がある。不要なページでまとめて無効にする場合。

指定した固定ページ以外ではContact Form 7とreCAPTCHA関連リソースを外している。

/* reCapchaを入れると遅くなるので、フォームがあるページ以外では読み込まない */
function custom_disable_recapcha_script() {
 if( ! is_page(array(1,3,5,7,9))){
    wp_dequeue_script('google-recaptcha');
    wp_dequeue_script('wpcf7-recaptcha');
 }
}
add_action( 'wp_enqueue_scripts', 'custom_disable_recapcha_script', 100 );

うまく動かないとき

  • add_action('wp_head')にすると動く時がある。実行順の問題
  • デフォルト優先度は20のようだが、100より大きくすると動くかもしれない
  • 単純にwp_dequeue_scriptだけ記述すれば動く場合は、if条件がおかしい可能性
  • wpcf7-recaptcha を contact-form-7 にすれば動くことがある。古いバージョンの場合

Discussion