WordPressで作成しているサイトでコメント欄をオープンにしていると困るのが、海外からの結構なスパムコメント。
メールで「モデレートしてください」ってきて、ちょっとワクワクしながらコメント一覧を見たとき、全然その投稿とは関係のない内容の英語のコメントだったりするとガッカリしますし、何より、それに対してスパムに移動したりゴミ箱へ移動させたりするという作業すらしたくない(そもそもそんなコメント見たくもない)ですよね。
ただWordPressでは、スパム確定のコメントを「スパム」にしたり「ゴミ箱へ移動」したりしても、ステータスが変更されてコメント一覧からいなくなるだけで、その後同じ人から来たコメントはまたまたモデレーション待ちになってしまうんです。
しかもWordPressの標準機能によって、ゴミ箱やスパムのデータは30日経過すると自動削除されてしまうので、「設定」→「ディスカッション」からブラックリストに登録しない限り、その人のスパム行為をブロックすることはできないので、その作業も必要で、これまた面倒ですね。
そこで本ページのコードを追加すると、以下の赤字の部分が自動化され、2度と同じ人からのスパムコメントを見なくて済む確率が各段に上がりますので困っている方は使ってみては?
- コメント一覧から「スパム」をクリックすると、「スパム」へ移動(WordPressの標準機能)
- 「スパム」へ移動すると同時にブラックリストへ以下の項目を追加
- 送信元IPアドレス
- 送信者が入力したメールアドレス
- 送信者が入力したURL
- 「スパム」に入っているコメントは30日経過後に自動削除(WordPressの標準機能)
コードを使用する前に、ここをクリックして注意事項をご確認ください
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
コメントをスパムへ移動させるのと同時にブラックリストへ登録するコード
以下のコードを有効化しているテーマの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 );











コメントを残す