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.
