「WordPressのコメントフォームからスパムコメントが届いて困っている」
「コメントフォームでスパム対策を行いたい」

今回は、そんな方向けにスパム対策をご紹介いたします。reCAPTCHAの代わりになる「Turnstile」を使った対策方法です。

設定はコピペでかんたんに行えるので、スパムコメントに悩まされている方でもすぐに導入可能です。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。

WordPressのコメントフォームにTurnstileを設定しよう

無料のスパム対策として使える「Turnstile」というサービス。

上記記事では、Contact Form 7に「Turnstile」を設定する方法をご紹介していますが、
当記事では、WordPressのコメントフォームに、Turnstileを設定する方法をご紹介します。

下準備

設定前の下準備として、次の2点を確認してください。

  • Turnstileのサイトキー・シークレットキーを取得済み
  • functions.phpを編集するために「Code Snippets」などのプラグインを有効化済み

Turnstileのサイトキー・シークレットキーは、「cloudflare.com」から取得できます。

Turnstileのサイトキー・シークレットキー

Turnstileのサイトキー・シークレットキー

こちらのセットアップ方法を参照してください。キーの取得手順は同じです。

下準備が済んだら、早速設定方法を見てみましょう。

設定方法(コピペで使えます)

以下のコードを、functions.phpもしくは「Code Snippets」などのプラグインに貼り付けてください。

コメント入力欄の上にTurnstileのウィジェットを表示し、送信時に認証を行うようにする記述です。

※サイトキー・シークレットキーは、ご自身のものに置き換えてください。
/* WordPress コメントフォーム用 Turnstile 対策 */
add_action( 'comment_form_after_fields', 'add_turnstile_to_comment_form' );
add_action( 'comment_form_logged_in_after', 'add_turnstile_to_comment_form' );

function add_turnstile_to_comment_form() {
	// Turnstile 本体(ショートコードは使わず直書き)
	?>
	<div class="cf-turnstile" data-sitekey="ここにサイトキーをコピペ"></div>
	<?php
}

/**
 * コメントが使われるページでのみ Turnstile JS を読み込む
 */
add_action( 'wp_enqueue_scripts', function () {
	if ( is_singular() && comments_open() ) {
		wp_enqueue_script(
			'cf-turnstile',
			'https://challenges.cloudflare.com/turnstile/v0/api.js',
			[],
			null,
			true
		);
	}
});

/**
 * コメント送信前に Turnstile を検証
 */
add_filter( 'preprocess_comment', 'verify_turnstile_before_comment' );

function verify_turnstile_before_comment( $commentdata ) {

	// 管理画面・XML-RPC 経由の投稿は対象外(必要に応じて)
	if ( is_admin() || defined( 'XMLRPC_REQUEST' ) ) {
		return $commentdata;
	}

	// Turnstile のレスポンスが無い場合は失敗
	if ( empty( $_POST['cf-turnstile-response'] ) ) {
		wp_die( '認証に失敗しました。もう一度お試しください。' );
	}

	// Cloudflare の Secret Key
	$secret = 'ここにシークレットキーをコピペ';

	$response = wp_remote_post(
		'https://challenges.cloudflare.com/turnstile/v0/siteverify',
		[
			'body' => [
				'secret'   => $secret,
				'response' => sanitize_text_field( $_POST['cf-turnstile-response'] ),
				'remoteip' => $_SERVER['REMOTE_ADDR'] ?? '',
			],
		]
	);

	// 通信エラー時
	if ( is_wp_error( $response ) ) {
		wp_die( '認証サーバーに接続できませんでした。' );
	}

	$result = json_decode( wp_remote_retrieve_body( $response ), true );

	// 検証失敗
	if ( empty( $result['success'] ) ) {
		wp_die( '認証に失敗しました。' );
	}

	return $commentdata;
}

正しく設定できたら、コメントフォームにTurnstileのウィジェットが表示されます。

Turnstileのウィジェットが表示されているコメントフォーム

Turnstileのウィジェットが表示されているコメントフォーム

正常に認証され、コメントを投稿できるかテストしておきましょう。

当記述は、WordPress標準のcomment_form()を使用しているテーマ向けです。コメントフォームの構造によってはTurnstileが正しく表示されないことがあります。

Turnstileの表示位置や見た目は、お使いのテーマによって異なる場合がありますが、デフォルトのままで問題ありません。

まとめ

WordPressのコメントフォームにも、Turnstileを使ったスパム対策を導入できます。

プラグインを追加せず、functions.phpにコードを貼り付けるだけで設定可能です。reCAPTCHAの代替としても使えるため、スパムコメントに悩んでいる場合は、ぜひ導入してみてください。

Contact Form 7のスパム対策も併せて行なうと、作業がスムーズです。

スパム対策のおすすめ記事

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。