Contact Form 7のreCAPTCHAを問い合わせページ以外で読み込ませないようにする方法

WordPressプラグインのContact Form 7でスパム送信を防ぐために、GoogleのreCAPTCHAはよく使われます。

しかし、reCAPTCHAを使用するとJavaScriptが読み込まれるため、サイトの表示速度が低下してしまいます。

ということで今回は、問い合わせページ以外ではreCAPTCHAを読み込ませない方法を紹介します。

問い合わせページ以外でreCAPTCHAのコードを読み込ませない方法

以下のPHPコードを、functions.phpにコピペしてください。

/**
 * コンタクトページ以外でreCAPTCHAを無効化
 */
if (!function_exists('dequeue_recaptcha_scripts')) {
    function dequeue_recaptcha_scripts()
    {
        // Contact Form 7を使用しているページのスラッグ
        $contact_slugs = array(
            'contact' // 問い合わせページのスラッグ
        );

        if (is_page() || is_single()) {
            global $post;
            $slug = $post->post_name;

            $is_contact_page = in_array($slug, $contact_slugs);
            
            if(!$is_contact_page) {
                // 問い合わせページ以外で無効化
                wp_dequeue_script('google-recaptcha');
                wp_dequeue_script('wpcf7-recaptcha');
            }
        } else {
            // 固定ページ・投稿ページ以外では無効化
            wp_dequeue_script('google-recaptcha');
            wp_dequeue_script('wpcf7-recaptcha');
        }
    }
    add_action('wp_enqueue_scripts', 'dequeue_recaptcha_scripts', 100, 1);
}

これで問い合わせページ以外ではreCAPTCHAのJavaScriptが読み込まれなくなります。

コードの解説

コード自体はそこまで難しくありません。

global $post;
$slug = $post->post_name;

現在の投稿のスラッグを取得します。

$contact_slugs = array(
    'contact' // 問い合わせページのスラッグ
);

Contact Form 7を使っているページのスラッグを配列で記述します。

複数ページでContact Form 7を使っている場合は、

$contact_slugs = array(
    'contact',
    'recruit'
);

このように記述します。

wp_dequeue_script('google-recaptcha');
wp_dequeue_script('wpcf7-recaptcha');

Contact Form 7のソースコードを見たところ、reCAPTCHAに関するJavaScriptが2つ読み込まれていたので、両方とも読み込まないようにします。

 add_action('wp_enqueue_scripts', 'dequeue_recaptcha_scripts', 100, 1);

Contact Form 7でreCAPTCHAに関するJavaScriptを読み込むadd_action('wp_enqueue_scripts')は優先度(第3引数)が20になっていたので、ここではそれよりも大きい100にしています。

後から上記を読み込ませるためです。

Page Speed Insightsの点数

Page Speed Insightsの点数は以下のように変化しました。

カスタマイズ前
カスタマイズ後

かなり点数が上がりました。効果抜群ですね。


その他の記事