Yes. There are a variety of ways to do this, primarily, we’ll need to tackle the wp_delete_user() function.
Your first task, and the tricky one, is to identity which accounts are spam, and which are real. This can be quite an adventure if your site gains new users regularly.
With the following example, we target two values, the user’s email
account and meta_data
.
In this case, we have an idea if it’s a spam account by interpreting the email address. So let’s add a list in an array:
$emails = array(
'[email protected]',
'[email protected]',
'[email protected]',
);
Then we have a custom user meta data named points
:
$meta_key = 'points';
And in our case, we know that if the meta key value is 10
, then it is definitely a spam user. So we set the value:
$meta_key = 10;
Now let’s put it together into a function:
function wpse_delete_users_by_email($emails, $meta_key, $meta_value) {
if (!is_array($emails)) return;
foreach ($emails as $email) {
// get user data via email
$user = get_user_by( 'email', $email );
$user_id = $user->ID;
$user_email = $user->user_email;
// get
$meta_data = get_user_meta($user_id, $meta_key, TRUE);
// if meta data equals the meta value
if ($meta_data == $meta_value) {
// confirm that emails match
if ($user_email == $email) {
// must include this, or it will throw a 'call to undefined function' error
require_once(ABSPATH.'wp-admin/includes/user.php' );
// delete spam user
wp_delete_user( $user_id );
// display results
echo '<br>' . $email;
}
}
}
}
Simple stuff, but sometimes when dealing with spam and bots, one less headache can be valuable.