Multiple Roles Interface contains an optional safeguard to prevent site administrators from accidentally removing all roles from a user during editing. To activate it, all you need to do is add a line defining the constant MULTI_ROLES_EDIT_DEFAULT to your wp-config.php file.
Activating the Safeguard
To enable this safeguard, add this one line to the wp-config.php file in the root of your WordPress installation:
define('MULTI_ROLES_EDIT_DEFAULT', true);
This will activate a conditional check in the function swt_set_multi_roles_edit(), which updates the user roles whenever you edit a user. The function will check if there are any roles assigned. If it finds none, it will automatically assign whatever role is granted when someone registers for the site.
Unless you’ve customized this, the default role will probably be Subscriber. There’s a filter that will let you assign a different role if you choose.
Why the Constant is Necessary
Multiple Roles Interface was originally built for multisite, whose Users pages have a frustrating feature not found on single-site WordPress installations. If a multisite user has no roles or capabilities, that person won’t show up in the Users list, though they are included in the total user count.
If you need to access the user to add a role back, you’ll have to dig around in the database or write a PHP script to restore them.
Defining the Constant on Selected Sites
In multisite you may have just one or two high-usage, high-error-prone sites you want to protect. In this case, don’t define the constant in wp-config.php. Try this instead:
// Safeguard user roles on the sites with IDs of 56 and 87 function define_swt_constant() { global $blog_id; if ($blog_id != 56 && $blog_id != 87): return; endif; if (!defined('MULTI_ROLES_EDIT_DEFAULT')): define('MULTI_ROLES_EDIT_DEFAULT', true); endif; } add_action('admin_init', 'define_swt_constant');
In this code I checked first to see if the constant is already defined. If it is and I try to define it again, it’ll throw errors.
Defining Different Values by Site ID
You can also opt to protect all sites except one or two, which may have a reason for users with no role. Defining the constant as false will have the same effect as leaving it undefined: the safeguard will not be activated.
// Safeguard user roles on all sites but IDs 24 and 109 function define_swt_constant_this_way() { if (!defined('MULTI_ROLES_EDIT_DEFAULT')): global $blog_id; if ($blog_id == 24 || $blog_id == 109): define('MULTI_ROLES_EDIT_DEFAULT', false); else: define('MULTI_ROLES_EDIT_DEFAULT', true); endif; endif; } add_action('admin_init', 'define_swt_constant_this_way');