我的会员网站充斥着垃圾邮件注册。我注意到的一件事是很多垃圾邮件发送者的电子邮件都是 @ hotmail.com 。
我想要删除所有订阅者并拥有@hotmail电子邮件地址的用户。
用户数据分为两个表wp_users
和wp_usermeta
,据我所知,我需要删除两个表中的数据以有效删除用户。我还没有设法找到一个可以在两个表中删除mysql中所有用户数据的查询。
我可以使用此查询删除wp_user表中的用户
DELETE
FROM wp_users
WHERE user_email LIKE "%@hotmail%"
但我还需要从wp_usersmeta
表中删除数据,并确保我只删除订阅者(meta_key = wp_capabilities and meta_value = subscriber
)。
我有什么想法可以做到这一点?我缺少的任何其他表中是否有用户数据?订阅者没有任何与他们相关的帖子。
我看过一些垃圾邮件注册插件,但它们是预防性的。现在,我需要一种方法来摆脱这些恼人的垃圾邮件发送者电子邮件。
答案 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:它将帮助您解决此问题和未来的问题。