スパムコメントが数万件溜まっている場合にそれを一度に削除するスクリプト WP-CLI利用

古くから運用されている、メディアサイトなどで、コメントは使ってないが開いており、スパムコメントが数万件になっている。といったことあると思います。本当に不要であれば、無駄なデータでDBの容量を取っているのはもったいないです。そんな場合は、WP-CLIを利用して一気に削除してしまいましょう。

※ もしかしたら、削除が良くない場合もあるかもしれません。くれぐれも実行する場合は、バックアップを取ってから実施することをおすすめします。

WP-CLIを利用したシェルスクリプトを書く

コメント数が少ない場合は wp comment delete $(wp comment list --format=ids) --force でよいのですが、コメントが多すぎる場合 zsh: argument list too long: wp といった形でエラーになる場合があります。

なので、シェルスクリプトを利用して分割実施をしてみます。今回はdelete-comment.shとしてみます。

#!/bin/bash

# バッチサイズを設定(例えば100づつ)
batch_size=100

# すべてのコメントIDを取得し、バッチ処理で削除
while true; do
    # バッチサイズ分のコメントIDを取得
    ids=$(wp comment list --format=ids --number=$batch_size)

    # コメントがない場合、ループを終了
    if [ -z "$ids" ]; then
        echo "すべてのコメントが削除されました。"
        break
    fi

    # コメントを削除
    wp comment delete $ids --force
done

これで、sh delete-comment.sh とすれば実行されて、コメントがすべてなくなります。

コメントの機能自体を停止する

コメントの機能停止する場合は、functions.phpに該当の記述を書くか。プラグインを利用します。