2026年5月20日

2026年5月20日

WordPressのスパムコメントを自動削除する方法

はじめに

WordPressのコメントスパムを放置すると、データベースが肥大化しサイトの表示速度に影響します。Akismetが自動判定したスパムは30日後に自動削除される仕組みがありますが、即時削除や定期削除のカスタマイズ方法を解説します。

即時削除の方法

WP-CLIで一括削除(最も簡単)

# スパムコメントをすべて削除
wp comment delete $(wp comment list --status=spam --format=ids) --force

# 承認待ちコメントも削除
wp comment delete $(wp comment list --status=hold --format=ids) --force

# ゴミ箱のコメントも削除
wp comment empty-trash

SQLで直接削除

-- wp_comments のスパムをすべて削除
DELETE FROM wp_comments
WHERE comment_approved = 'spam';

-- 関連するコメントメタも削除
DELETE FROM wp_commentmeta
WHERE comment_id NOT IN (
    SELECT comment_ID FROM wp_comments
);

スパムの自動削除を設定する

WordPress標準の自動削除を活用

WordPressには wp_scheduled_delete というイベントが毎日実行され、30日以上前のスパム・ゴミ箱コメントを自動削除します。この仕組みが機能しているか確認します。

# cron イベントの確認
wp cron event list | grep scheduled_delete

自動削除期間を短縮する

// functions.php — スパムコメントを7日で自動削除
add_filter('wp_scheduled_delete_comment_age', function() {
    return 7; // 日数(デフォルト30日)
});

Akismetの自動破棄を設定

Akismetには「最も悪質なスパムを自動的に破棄する」オプションがあります。

設定 → Akismet Anti-Spam → 「スパムルール」→ 
「破棄的と判断されたスパムを自動的に破棄する」をON

コメント投稿時にスパムを即削除

// スパム判定されたコメントをデータベースに保存せず破棄
add_action('wp_set_comment_status', function($comment_id, $status) {
    if ($status === 'spam') {
        wp_delete_comment($comment_id, true); // force_delete=true
    }
}, 10, 2);

スパムを防ぐ設定

ディスカッション設定の最適化

設定 → ディスカッション:
- 「コメントの投稿者がname とメールアドレスを記入することを必須にする」→ ON
- 「すでに承認されたコメントの投稿者のコメントを許可し、それ以外のコメントは承認待ちにする」→ ON
- 「スパムとみなすコメントのリンク数」→ 1〜2に設定

コメントフォームにhoneypot追加

// ボット対策のhoneypotフィールドを追加
add_action('comment_form', function() {
    echo '<p style="display:none;">'
       . '<label>Leave empty: <input type="text" name="website_url" /></label>'
       . '</p>';
});

add_action('preprocess_comment', function($commentdata) {
    if (!empty($_POST['website_url'])) {
        wp_die('スパムとして検出されました。');
    }
    return $commentdata;
});

注意事項

  • wp_delete_comment($id, true) の第2引数 true を忘れると、削除ではなくゴミ箱に移動されます
  • WP-Cronが正常に動作していないとスケジュール削除が実行されません(wp cron event run wp_scheduled_delete で手動実行可能)
  • 大量削除はDBに負荷がかかるため、アクセスが少ない時間帯に実行することを推奨します

まとめ

スパムコメントは wp comment delete コマンドで即時削除、または wp_scheduled_delete_comment_age フィルターで自動削除期間を短縮して定期的にクリーンアップします。Akismetの自動破棄設定とhoneypotを組み合わせることで、スパムの蓄積自体を防げます。

お気軽にご相談ください

お見積りへ お問い合わせへ