ブログでコメントを受け付けていると、記事とは関係のないurlの列記や自社商品のリンクを配したいわゆるスパムコメントに悩まされます。こんな時は、googleのreCaptcha(リキャプチャ)を導入したい。
当方でも、スパム防止のプラグインAkismet Anti-Spamは導入済みですが、reCaptchaを導入後は、スパムコメントが激減いやほぼ無くなりました。今回こちらで導入したのは、プラグインも使わずに、いくつかのファイルを直接編集するものです。そんなに難しくはなかったので、これを読んで導入してみてはいかかでしょうか? ここから先に進める場合は、Googleのアカウントが必要ですので、もしまだの場合はGoolgeにユーザー登録しておいてください。実現すること
本記事、WordPress標準のコメント受付け時にreCaptchaを利用できるようにする。 導入に際しては、WordPress4.9.8を使用しています。reCaptchaの導入は簡単4ステップ
以下順番に説明します。- reCaptchaに登録して、サイトキー、シークレットキーのペアを取得する
- ヘッダにhttps://www.google.com/recaptcha/api.jsを読み込む
- コメントフォームにreCaptcha用のフィールドを追加
- function.phpにpre_comment_on_postをフックし、アクションを追加
手順1:reCaptchaに登録
以下のサイトにアクセスしてください。もしgoogleのログインを求められた場合は、あらかじめ準備したアカウント、パスワードでログインしてください。下記に示した登録フォームが表示されますので、以下の内容で登録します。
これだけ入力したら、画面右下のRegisterボタンで登録します。
- 識別名(ドメイン名でもなんでもかまいません)
- 本執筆時点ではreCaptchaはV2とV3のどちらかを選べますが、迷わず最新のV3をえらびましょう。
- 登録したいドメインを1行に1つずつ入力します。※のフィールドはV3のみ表示します。
- Accept The reCAPTCHA Term of Serviceのチェックはいれないと登録出来ません。チェックしてください。
手順2:ヘッダーでapi.jsをロードする
Wordpressの場合は、テーマフォルダー内のheader.phpのヘッダー部の最後(</head>の直前)に、下記の行を入力し、api.jsファイルをロードするようにしてください
1 |
< script src = 'https://www.google.com/recaptcha/api.js?render=(sitekey)' ></ script > |
手順3:コメントフォームにreCaptchaフィールドを追加する
手動でフィールドを追加する場合は、下記のhtmlを表示したい場所に追加する
1 |
< div class = "g-recaptcha" data-sitekey = "(site key)" ></ div > |
手順4:function.phpにpre_comment_on_postをフックし、アクションを追加
Wordpressのテーマフォルダ内にあるfunction.phpを編集し、pre_comment_on_postをフックし、アクションを追加する。下記のコーディングをそのまま追加すれば良い。
1
2
3
4
5
6
7
8
9
10
11
12 |
add_action( 'pre_comment_on_post', function( $parameter = true ) { if( isset( $_POST['g-recaptcha-response'] ) ) { $response = json_decode( wp_remote_retrieve_body( wp_remote_get( 'https://www.google.com/recaptcha/api/siteverify?secret=(seacret key)&response=' .$_POST['g-recaptcha-response'] ) ), true ); if( $response['success'] ) { return $parameter; } elseif( !$response['success'] ) { wp_die( '< h1 >認証に失敗しました</ h1 >< p >「私はロボットではありません」にチェックを入れてください。</ p >', '', array( 'back_link' => true ) ); } } elseif( !isset( $_POST['g-recaptcha-response'] ) && !is_user_logged_in() ) { wp_die( '< h1 >ロボットと判定されました</ h1 >< p >あなたがロボットでなければ、ブラウザの javascript を有効にしてください。</ p >', '', array( 'response' => 403, 'back_link' => true ) ); } }); |
動作確認
上記の4ステップが済んでいれば、既にコメントフィールドにreCaptchaが表示され、”私はロボットでありません”にチェックをいれなければ、コメントを送信できないはずです。 もし、”私はロボットでありません”フィールドが表示されなかったり、動作しない場合は下記の点について詳しく調べてみてください。- サイトキーとシークレットキーが入れ替わっていないか?
- これらのキーが正しく入力されているか、特に先頭または最後尾の文字が正しいかどうかチェックしてください。