MySQL查询批量删除垃圾邮件Wordpress用户

时间:2013-09-04 09:52:44

标签: mysql wordpress

我的会员网站充斥着垃圾邮件注册。我注意到的一件事是很多垃圾邮件发送者的电子邮件都是 @ hotmail.com

我想要删除所有订阅者并拥有@hotmail电子邮件地址的用户。

用户数据分为两个表wp_userswp_usermeta,据我所知,我需要删除两个表中的数据以有效删除用户。我还没有设法找到一个可以在两个表中删除mysql中所有用户数据的查询。

我可以使用此查询删除wp_user表中的用户

DELETE 
FROM  wp_users 
WHERE  user_email LIKE  "%@hotmail%"

但我还需要从wp_usersmeta表中删除数据,并确保我只删除订阅者(meta_key = wp_capabilities and meta_value = subscriber)。

我有什么想法可以做到这一点?我缺少的任何其他表中是否有用户数据?订阅者没有任何与他们相关的帖子。

我看过一些垃圾邮件注册插件,但它们是预防性的。现在,我需要一种方法来摆脱这些恼人的垃圾邮件发送者电子邮件。

1 个答案:

答案 0 :(得分:2)

在MySQL中使用INNER JOIN时,您可以使用DELETE

DELETE
FROM  wp_users 
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE  wp_users.user_email LIKE  "%@hotmail%" AND [etc, etc.]

此解决方案为您提供了两个(或更多;-))问题:1)您无法重新分配帖子和链接(如果您愿意)和2)您必须在MySQL中处理JSON值。

更好的方法是使用WordPress功能完成工作。您可以使用get_users搜索用户,使用wp_delete_user删除用户。

<?php $args = array(
    'blog_id'      => $GLOBALS['blog_id'],
    'role'         => 'subscriber',
    'search'       => '*@hotmail.com'
 );

$blogusers = get_users($args);
    foreach ($blogusers as $user) {
        wp_delete_user( $user->ID, $reassign );
    }
?>

请阅读Function Reference:它将帮助您解决此问题和未来的问题。