如何根据“用户元”删除所有用户和帖子?

Posted

技术标签:

【中文标题】如何根据“用户元”删除所有用户和帖子?【英文标题】:how to delete all users and posts based on 'user_meta'? 【发布时间】:2016-12-16 05:53:46 【问题描述】:

我开发了一个小型 wordpress 应用程序,其中包含研究所(wp 用户)、培训师(wp 用户)、受训者(wp 用户)、课程(自定义帖子)和通知(自定义帖子)。所有应用程序都运行良好,但如果我删除一个机构,所有属于该机构的信息,如培训师、实习生、通知和课程也应该被删除。当我创建“研究所”用户时,我将所有相关信息(如名字、姓氏)存储在 wordpress 表“wp_users”中,“研究所名称”存储为“用户元”,在“wp_usermeta”中使用键“inistitute_name”如下表是我的代码:

  $user_data = array(
                'ID' => '',
                'user_pass' => '',
                'user_login' => $first_name,
                'user_email' => $user_email,
                'first_name' => $first_name,
                'last_name' => $last_name,
                'role' => 'admin'//get_option('default_option')
            );
            $random_password = wp_generate_password(8,false);
            $user_id = wp_insert_user( $user_data );
            update_user_meta( $user_id, 'inistitute_name',$insititute_name );

在创建 Trainer(或)Trainee 时,我的代码如下所示:

$user_data = array(
                   'ID' => '',
                   'user_pass' => '',
                   'user_login' => $first_name,
                   'user_email' => $trainer_email,
                   'first_name' => $first_name,
                   'last_name' => $last_name,
                   'role' => 'trainer'
             ); 
            $random_password = wp_generate_password(8,false);
            $user_id = wp_insert_user( $user_data );
            update_user_meta( $user_id, 'inistitute_name',$this->institute_name[0] );
            wp_set_password($random_password, $user_id);

在创建课程时,我的代码如下:

 $user_ID = get_current_user_id();
 $institute_name = get_user_meta($user_ID, 'inistitute_name', true);
 $post = array(
                'post_title'    => $title,
                'post_content'  => $description,
                'post_status'   => 'publish', 
                'post_type' => "courses"  
            );
 $id = wp_insert_post($post);
 update_post_meta( $id, 'inistitute_name', $institute_name );

假设我们说如果一个机构“abcd”被删除,那么与该机构相关的所有信息,如“培训师”、“实习生”、“课程”和“通知”也应该根据“用户元”字段删除.是否可以删除? (或)我做错了吗?谁能告诉我我做错了什么?

【问题讨论】:

【参考方案1】:

试试这个代码:

$user_args = array(
    'meta_key' => 'inistitute_name',
    'meta_value' => 'your_value', //<-- replace it by your user_meta value.
    'meta_compare' => '=',
    'orderby' => 'ID',
    'number' => -1
);
// Custom query.
$user_query = new WP_User_Query($user_args);

// Get query results.
$users = $user_query->get_results();

//print_r($users);
// Check for users
if (!empty($users))

    // Loop over users.
    foreach ($users as $user)
    
        $user_id = $user->ID;
        // Get each user's data.
        $user_info = get_userdata($user->ID);

        $user_display_name = $user_info->display_name;

        $args = array(
            'numberposts' => -1,
            'post_type' => 'any', //<-- you can Specific type by array('post', 'my_custom_post')
            'author' => $user_id
        );

        // get all posts by this user: posts, pages, attachments, etc..
        $user_posts = get_posts($args);

        if (!empty($user_posts))
        
            // delete all the user posts
            foreach ($user_posts as $user_post)
            
                wp_delete_post($user_post->ID, true);
            
        
        wp_delete_user( $user_id, $reassign );
    

else

    //"no user found"

我没有测试过这段代码,超出了我的 WP 知识。

请注意,在测试此代码之前,请务必备份数据库。

【讨论】:

【参考方案2】:

我得到了 wordpress.stackexchange.com 的解决方案,该问题的链接在这里

https://wordpress.stackexchange.com/questions/249435/how-to-delete-all-users-and-posts-based-on-user-meta/

【讨论】:

以上是关于如何根据“用户元”删除所有用户和帖子?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用编辑和删除rails_admin?

基于作为数组的键值删除用户元

如何使用socket.io mysql nodejs express删除帖子

sql 删除WordPress中的所有孤儿用户元

sql 删除WordPress中的所有孤儿用户元

sql 删除WordPress中的所有孤儿用户元