😎
WordPressでreCAPTCHAを特定のページ以外では読み込まない方法
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