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を組み合わせることで、スパムの蓄積自体を防げます。