从wp_USERS和wp_USERMETA中一次删除几千个订户

时间:2014-11-02 作者:markratledge

我有一个有7万垃圾邮件订阅者的网站,我不需要他们中的任何一个。因此,我需要使用adminer和/或phpmyadmin中的查询从wp\\U users中删除所有订阅者,并从wp\\U usermeta中删除每个用户的关联元。

但是为了防止服务器崩溃,我怎么能一次删除几千个呢?

这似乎是我需要的基本查询:

DELETE
FROM  wp_users 
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE meta_key = \'wp_capabilities\'
AND meta_value  LIKE \'%subscriber%
//except how do I select a few thousand at a time?
但是我如何一次选择几千个呢?

3 个回复
SO网友:ryanm

我最喜欢的方法不是通过数据库黑客攻击(我一直担心这会产生副作用),而是通过命令行工具。

例如,给出一个函数WP CLI install, 您可以简单地执行以下操作:

wp user delete $(wp user list --role=subscriber --field=ID --number=10) --reassign=1

这个reassign 参数是要向其重新分配内容的用户的用户ID。我们可以使用“-number”(限制),即使it is not well documented, 因为WP_User_Query 支持它。

这是一个干净的单行命令行实用程序,可以执行这样的操作。

在这种情况下,我建议您首先尝试子查询“wp user list…”查看将删除哪些用户。运行one liner后,您将看到如下信息:

... Success: Removed user 123 from https://example.com/. Success: Removed user 124 from https://example.com/. ...

SO网友:Fatih SARI

您可以为此使用Wp函数。wp\\u delete\\u user();此函数使用用户id。您可以通过以下方式获取所有订阅者的用户id:get\\u users()获取筛选的用户。

$get_subscribers = get_users(\'role=subscriber\');
foreach($get_subscribers as $user){
    wp_delete_user($user->ID);
}

SO网友:stemie

我有一个类似的问题,在阅读了这个问题后,我制作了这个插件(根据您的问题改编)。

安装后admin menu 在下面Users 调用Bulk User Delete 当您转到此页面时,它会批量删除用户,根据您的sql查询一次删除20个用户(我的原始查询略有不同)。

您可以使批处理变小或变大,但这允许您在没有服务器超时的情况下删除许多用户,大量垃圾邮件注册可能需要几分钟的时间。

它使用jquery在每个批处理完成后重新加载页面(我想这可以用ajax完成,但我需要一些快速的东西)。

也许其他人会觉得这很有帮助,您很可能需要根据您的情况调整sql查询。

    <?php 
    /*
    Plugin Name: Bulk Delete Spam Users
    Description: Delete the spam sign ups
    Version: 0.1
    Author: Steven
    Text Domain: bulk-delete-spam-users
    */

    add_action(\'admin_menu\', \'my_users_menu\');
    function my_users_menu() {
        add_users_page(\'Bulk User Delete\', \'Bulk User Delete\', \'read\', \'bulk-user-delete\', \'active_users_nodel\');
    }

    function active_users_nodel() {
        global $wpdb;
        $result = array();
        $result = $wpdb->get_results(\'
            SELECT wp_users.id, wp_users.user_login FROM wp_users 
            INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
            WHERE meta_key = "wp_capabilities"
            AND meta_value  LIKE "%subscriber%"
        \');

        $users = $result;
        $i = 0;
        echo \'<div class="bud-box">\';

        $users_remain = $users ? \'true\' : \'false\';

        $current_user = wp_get_current_user();
        echo \'<strong>Orphaned content will be reassigned to:</strong><br />\';
        echo \'Username: \' . $current_user->user_login . \'<br />\';
        echo \'User ID: \' . $current_user->ID . \'<br />\';

        <h3>currently deleting...</h3>

        foreach($users as $user) {
            $i++;
            if($i < 20) {
                wp_delete_user( $user->ID, $current_user->ID );
                var_dump($user->user_login);
            }
        }
        echo \'</div>\';
        ?>

        <script>
            (function($){
                $(document).ready(function(){
                    var uremain = <?php echo $users_remain; ?>;
                    if( uremain == true){
                        location.reload(); 
                    }
                });
            })(jQuery);
        </script>

    <?php } ?>

结束

相关推荐

WP_USE_EXT_MYSQL

下面是源代码中wpdb类的构造函数。根据谷歌搜索,这一名称最近已从USE\\u EXT\\u MYSQL重命名。然而,我在源代码中找不到任何定义了常量的地方。function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { register_shutdown_function( array( $this, \'__destruct\' ) ); if ( WP_DEBUG && WP_