I don’t want to delete WordPress users because I want to keep their information – or at least their member ID. I can delete all their other information if I want, but I want to keep their member ID, user ID, etc. I want to mark them as invalid only.
Here’s how I did it:
Uncheck ‘delete users’ from capabilities for administrator role. That took off the delete link on the user.
Added new columns on the users list screen for Deactive/Activate and Status, then added this code to functions.php:
add_filter('manage_users_columns', 'cc_add_user_id_column'); function cc_add_user_id_column($columns) { $columns['delete'] = 'Activate/Deactivate'; $columns['status'] = 'Status'; return $columns; } add_action('manage_users_custom_column', 'cc_show_user_id_column_content', 10, 3); function cc_show_user_id_column_content($value, $column_name, $user_id) { $user = get_userdata( $user_id ); if ( 'delete' == $column_name ) { $status = get_user_meta($user_id, 'member_status', true); if (in_array('member',$user->roles)) { if ($status == 'ACTIVE') { return '<a href="/deactivate-user?id='.$user_id.'">deactivate</a>'; } else { return '<a href="/activate-user?id='.$user_id.'">activate</a>'; } } } if ( 'status' == $column_name ) { return get_user_meta($user_id, 'member_status', true); } return $value; }
Made a page for activating a user:
$user_id = $_GET['id']; update_user_meta($user_id,'member_status','ACTIVE', 'INACTIVE'); header("Location: /wp-admin/users.php");
Made a page for deactivating a user:
$user_id = $_GET['id']; update_user_meta($user_id,'member_status','INACTIVE', 'ACTIVE'); header("Location: /wp-admin/users.php");
Both pages change the status and return to the users list page in wp-admin.