1

我的会员网站已被垃圾邮件注册所淹没。我注意到的一件事是很多垃圾邮件发送者的电子邮件都是@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)。

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

我见过一些垃圾邮件注册插件,但它们是预防性的。现在,我需要一种方法来摆脱这些烦人的垃圾邮件。

4

1 回答 1

2

在 MySQL 中使用DELETE时可以使用INNER JOIN 。

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 );
    }
?>

请阅读功能参考:它将帮助您解决这个问题和未来的问题。

于 2013-09-04T13:52:50.463 回答