Personal WP Customization Notes (PWCN)

WordPressで実際に行ったカスタマイズの記録、発生した問題への対処時のメモ、ブロックテーマのカスタマイズなど

コメントをスパムへ移動させるのと同時にブラックリストへ登録する方法

WordPressで作成しているサイトでコメント欄をオープンにしていると困るのが、海外からの結構なスパムコメント

メールで「モデレートしてください」ってきて、ちょっとワクワクしながらコメント一覧を見たとき、全然その投稿とは関係のない内容の英語のコメントだったりするとガッカリしますし、何より、それに対してスパムに移動したりゴミ箱へ移動させたりするという作業すらしたくない(そもそもそんなコメント見たくもない)ですよね。

ただWordPressでは、スパム確定のコメントを「スパム」にしたり「ゴミ箱へ移動」したりしても、ステータスが変更されてコメント一覧からいなくなるだけで、その後同じ人から来たコメントはまたまたモデレーション待ちになってしまうんです。

しかもWordPressの標準機能によって、ゴミ箱やスパムのデータは30日経過すると自動削除されてしまうので、「設定」→「ディスカッション」からブラックリストに登録しない限り、その人のスパム行為をブロックすることはできないので、その作業も必要で、これまた面倒ですね。

そこで本ページのコードを追加すると、以下の赤字の部分が自動化され、2度と同じ人からのスパムコメントを見なくて済む確率が各段に上がりますので困っている方は使ってみては?

  1. コメント一覧から「スパム」をクリックすると、「スパム」へ移動(WordPressの標準機能)
  2. 「スパム」へ移動すると同時にブラックリストへ以下の項目を追加
    • 送信元IPアドレス
    • 送信者が入力したメールアドレス
    • 送信者が入力したURL
  3. 「スパム」に入っているコメントは30日経過後に自動削除(WordPressの標準機能)

コメントをスパムへ移動させるのと同時にブラックリストへ登録するコード

以下のコードを有効化しているテーマのfunctions.phpへ追加するだけで機能します。

/*** コメントがスパムに移動された時、IP・メール・URLを自動的にブロックリストへ登録する ***/
function pwcn_auto_blacklist_spam_triple( $comment_id, $status ) {
	if ( 'spam' !== $status ) {
		return;
	}

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return;
	}

	// ブロック対象を格納する配列
	$new_targets = array();

	// 1. IPアドレスの抽出
	$ip = trim( $comment->comment_author_IP );
	if ( ! empty( $ip ) && '::1' !== $ip && '127.0.0.1' === $ip ) {
		$new_targets[] = $ip;
	}

	// 2. メールアドレスの抽出
	$email = trim( $comment->comment_author_email );
	if ( ! empty( $email ) ) {
		$new_targets[] = $email;
	}

	// 3. サイトURLの抽出(http:// などのプロトコルを除いたドメイン部分だけでも効果的ですが、まずはそのまま)
	$url = trim( $comment->comment_author_url );
	if ( ! empty( $url ) ) {
		$new_targets[] = $url;
	}

	// 登録すべきデータがなければ終了
	if ( empty( $new_targets ) ) {
		return;
	}

	// 現在のリストを取得して配列化
	$disallowed_keys = get_option( 'disallowed_keys' );
	$keys_array      = ! empty( $disallowed_keys ) ? explode( "\n", trim( $disallowed_keys ) ) : array();
	$keys_array      = array_map( 'trim', $keys_array );

	// 重複チェックをして追加
	$updated = false;
	foreach ( $new_targets as $target ) {
		if ( ! in_array( $target, $keys_array, true ) ) {
			$keys_array[] = $target;
			$updated      = true;
		}
	}

	// 変化があればDBを更新
	if ( $updated ) {
		update_option( 'disallowed_keys', implode( "\n", $keys_array ) );
	}
}
add_action( 'wp_set_comment_status', 'pwcn_auto_blacklist_spam_triple', 10, 2 );

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します

WordPressサイトのカスタマイズ方法、機能追加を行うプログラム例など
アップロードした画像を自動でWebP形式に変換して保存するためのコード例