Let's assume that you inherited WordPress installation (or three) with tens of instances (or hundreds in this case) which are generating spam using comments. I will try to describe problem here and suggest solution which doesn't require clicking in WordPress but instead using wp cli which is faster and easier especially if you don't have administrative account on all those WordPress instances. Interested? Read on.
WordPress comment spam
If you try googling around how to prevent WordPress comment spam, you will soon arrive at two solutions:
- changing default_comment_status to closed which will apply to all new posts
- changing comment_status on all existing posts to close
So, in summary, all this can easily be done using following commands in wp cli:
wp post list --post-status=publish --post_type=post --comment_status=open --format=ids \ | xargs -d ' ' -I % wp post update % --comment_status=closed wp option update default_comment_status closed wp option update close_comments_for_old_posts 1
If wp cli doesn't work for you (for example if your WordPress instance is so old that wp cli is returning errors for some plugins instead of working) you can achieve same thing using SQL (this assumes that wp db query is working, but if it doesn't you can always connect using mysql and login and password from wp-config.php):
cat << __SQL__ | wp db query update wp_posts set comment_status='closed' where comment_status != 'closed' ; update wp_options set option_value = 'closed' where option_name = 'default_comment_status' and option_value != 'closed' ; update wp_options set option_value = 1 where option_name = 'close_comments_for_old_posts' and option_value != 1 __SQL__This is also faster option, because all SQL SQL queries are invoked using single wp db query call (and this since php instance startup which can time some time).
Cleaning up held or spam comments
After you disabled new spam in comments, you will be left with some amount of comments which are marked as spam or left in held status if your WordPress admins didn't do anything about them. To cleanup database, you can use following to delete spam or held comments:
wp comment delete $(wp comment list --status=spam --format=ids) --force wp comment delete $(wp comment list --status=hold --format=ids) --force
Disabling contact form spam
All spam is not result of comments, some of it might come through contact form. To disable those, you can disable comment plugin which will leave ugly markup on page without it enabled, but spams will stop.
# see which contact plugins are active wp plugin list | grep contact contact-form-7 active none 5.7.5.1 contact-form-7-multilingual active none 1.2.1 # disable them wp plugin deactivate contact-form-7