複数の特定ページでreCAPTCHAを表示 投稿ページと固定ページ同時に設定

複数の特定ページでreCAPTCHAを表示 投稿ページと固定ページ同時に設定 静岡県富士市のホームページ制作

WPでサイトを作成していて、問い合わせフォームを設定することもあるでしょう。

その際に、よく利用される問い合わせフォームは「Contact Form 7」だと思います。

ただし問い合わせフォームを設置すると、いつからか迷惑メールが大量に届くようになってしまいます。

そこでGoogleのサービスである「reCAPTCHA」を設定することで、迷惑メールを一気に減らすことができます。

reCAPTCHAはとても良いシステムではあるのですが、大きな問題があります。それは「サイト表示速度がかなり遅くなってしまうこと」です。

なぜなら問い合わせフォームを設置していないページでも、reCAPTCHA関連のタグがソースの中に挿入されてしまうためです。

そこで、「問い合わせフォームを設置しているページのみreCAPTCHAを表示させる」ようにすることで、それ以外のページの速度に影響が出なくなるようにしたいと考えました。

ここでさらに問題が。

いろいろ検索してみたのですが、「投稿ページのみ」、もしくは「固定ページのみ」でreCAPTCHAを設定する説明はあったのですが、「投稿ページと固定ページの両方」で設定する方法をなかなか見つけることができませんでした。

functions.phpを触るため注意

今回の設定は「functions.php」に記入していくことになります。

WPのことを知っている人であればわかっていることだと思いますが、functions.phpに何かしらの変更を加える際には、そしてとくに、検証を行う際には、必ずバックアップをするようにしてください。

間違った記述を行ってしまうと、サイト上にエラーが表示されたり、サイトそのものが表示されなくなったりしてしまうためです。

エラーが発生した場合

弊社がfunctions.phpを触る際には、まずFTPソフトを使ってサーバーから現在使用しているfunctions.phpを持ってきます。つまりバックアップとして保存しておくわけです。

その後、それをさらにコピーして、コピーしたfunctions.phpを触ります。

投稿ページと固定ページの両方

「特定の投稿ページにのみ」や「特定の固定ページにのみ」にreCAPTCHAを表示させるコードは調べると沢山出てくるので、ここでは省かせてもらいます。

今回は「投稿ページと固定ページの両方」で設定する場合を紹介します。

add_action( 'wp_enqueue_scripts', function() {
if(is_page('該当する固定ページのパーマリンクを記入')) return;
if(is_single('該当する投稿ページのパーマリンクを記入')) return;
wp_deregister_script('google-recaptcha');
}, 20);

たとえば固定ページでフォームを設置しているURLが「https://abc.com/form/」だったとします。

そして「https://abc.com/def/ghi/」という投稿ページでもフォームを設定しているとします。

すると以下のようになります。

add_action( 'wp_enqueue_scripts', function() {
if(is_page('form')) return;
if(is_single('ghi')) return;
wp_deregister_script('google-recaptcha');
}, 20);

弊社で実際に設定してみたら、設定したページのソースを開いてみたところ、recaptcha関連のタグがしっかり入っていました。そして設定した以外のページには入っていませんでした。

追加 調べたらいくつか発見

色々調べてみたら、詳しく紹介してくれているサイトがあったので、以下に紹介します。

弊社で検証をしたわけではないため、もし利用する際には必ずバックアップを取ってからの方がよいでしょう。

本当はすべてのページに問い合わせ表示をしたい

本来であれば、reCAPTCHAは設定したくありません。サイトの表示スピードが遅くなるためです。

そしてフォームをすべてのページで表示させたいとも考えています。どこからでも問い合わせの入り口があるというのはマーケティングの観点からして良いことだと思っているためです。※ケースバイケースではありますが・・・。

しかし迷惑メールが大量に来るのも問題です。

この辺りの良い対策を見付けられたのなら、また紹介したいと思います。

タイトルとURLをコピーしました