The Members WordPress plugin by Justin Tadlock is an incredible tool for revealing the underbelly of user roles and permissions on your WordPress site. Until I discovered this plugin, my concept of user roles was completely tied up in my code. But with Members, we get an intuitive and comprehensive UI for managing the various roles and capabilities that a site’s users may have.
I often wonder why so many plugins contain hooks and filters that they don’t document, and I recently found a good example with the Members plugin.
My task was to filter out certain roles from the list shown below, depending on the logged-in user and what role(s) they have.
In particular, the Administrator role is the top level of access. So for any users that are not Administrators but who still have the ability to edit roles, we want to make sure that they can’t see or edit the Administrator role using the Members UI.
To achieve this, we’d ideally have a hook given to us by the plugin author. It turns out the exact hook we need is offered by the plugin, but it’s more or less hidden within the plugin code several folders deep.
Since Justin uses the apply_filters
function on his array of roles to show on the page, we can hook into his filter named members_manage_roles_items
and perform the conditional logic we need based on the logged-in user.
In the above example, we’re just removing the Administrator role for non-Administrators, but of course this is just one example of what you can do.
Another thing to keep in mind is that we have not removed the actual ability for the logged-in user to edit the Administrator role. We have just hidden the role from them on this one particular screen.
To truly remove the ability for certain users to edit certain roles, we can use the WordPress core editable_roles
filter. Among other things, this makes it so that lower-level users cannot create Administrators on the site.
The combination of the editable_roles
hook and the members_manage_roles_items
hook works well since the former can remove permissions to edit certain roles, and the latter can remove the ability to see certain roles in the Members table.
Pete says
Very useful! Surprising that something like this isn’t already included in the plugin; it seems like it’s nearly always needed. I don’t know when you’d ever want a non-administrator to be able to grant administrator privileges to a user.