[wp-trac] [WordPress Trac] #17924: Make Integrating Multiple Roles Per User Easier for Plugin Authors
WordPress Trac
wp-trac at lists.automattic.com
Tue Jun 28 23:40:49 UTC 2011
#17924: Make Integrating Multiple Roles Per User Easier for Plugin Authors
-------------------------+-------------------------------------------------
Reporter: mobius5150 | Owner:
Type: enhancement | Status: new
Priority: normal | Milestone: Awaiting Review
Component: | Version: 3.2
Role/Capability | Keywords: has-patch dev-feedback needs-
Severity: normal | testing
-------------------------+-------------------------------------------------
WordPress supports multiple role per user, however to use this feature is
very difficult for plugin authors to integrate well, and often requires
adding plugin admin pages instead of integrating with the pre-existing
user-edit.php. Due to the difficulty of this, and the fact that most
plugins that allow this aren't very user-friendly, I believe users are
staying away from multiple roles.
This ticket aims to change how easy it is to work with the current role
management system, as well as to add a couple role-based filters and
actions, while still keeping the front-end of the administrative interface
single-role only. (Because it seems to be the prevailing opinion the
multiple roles per user is plugin territory.) In addition, I completely
agree that the vast majority of sites can best function with one role per
user, however in some cases (such as the site I'm working on now) you
simply need to be able to choose multiple roles.
= Changes =
== First Patch File ==
attachment:Replace_Admin_Role_Dropdown.patch
The first patch file moves the code for the role dropdown off of /wp-admin
/user-edit.php, /wp-admin/includesclass-wp-users-list-table.php, /wp-admin
/users-new.php, /wp-admin/options-general.php and into /wp-
admin/includes/template.php where two new functions are created:
=== {{{wp_get_dropdown_roles()}}} ===
This function does what {{{wp_dropdown_roles}}} used to do, but it returns
the value instead of echoing it. (Note that {{{wp_dropdown_roles()}}} now
acts as a wrapper for {{{wp_get_dropdown_roles()}}}. (The old function is
still in place for backwards compatibility.)
=== {{{wp_user_role_selector()}}} ===
This function creates the full dropdown and applies a new
{{{'user_role_selector'}}} filter to the markup before echoing it out.
This way the default dropdown can be overridden by something else (perhaps
checkboxes).
== Second Patch File ==
attachment:Create_Role_Update_Actions_Filters.patch
The second patch file changes the functions that handle user creation and
updating so they can be hooked into and a developer could make this work
with multiple roles. This file affects /wp-admin/includes/users.php and
/wp-includes/user.php.
=== {{{wp_sanitize_user_role()}}} ===
A new {{{sanitize_user_role}}} filter was created and sanitation of
{{{$_POST['role']}}} in /wp-admin/includes/user.php when user-edit.php is
submitted was moved there. The new function is called
{{{wp_sanitize_user_role()}}}. (This is so that if user-edit.php is
submitted and {{{$_POST['role']}}} were to contain a value other than a
string (perhaps an array of roles) it can be sanitized and worked with
accordingly.
=== {{{pre_user_role}}} ===
A new {{{pre_user_role}}} filter was added to {{{wp_insert_user()}}} in
/wp-includes/user.php. This was mainly done because almost every other
field that this function processes has a matching filter like this, and I
thought maybe {{{$roles}}} felt left out as it did not. :(
I supposed somebody could also use it for something useful as well.
=== {{{apply_user_role}}} ===
A new {{{apply_user_role}}} action was added to {{{wp_insert_user()}}}.
The function itself no longer uses {{{$user->set_role()}}}, instead saving
user role changes is now handled by this new action. A matching function
{{{wp_apply_user_role()}}} was added to set the user role like
{{{wp_insert_user()}}} used to do. This way however, a plugin author could
simply hook into {{{apply_user_role}}} to apply multiple roles to a user.
= Conclusion =
All in all, this patch was designed so that the average user would never
even notice that a change has been made to user management, however a
plugin author looking to add an easy way for people to select multiple
roles for a user can quickly hook into this and have a nice, easy, well
integrated and WordPress-like plugin.
I have done a few tests adding users and changing roles around with these
patches applied on a fresh installation with no plugins and the only
changes to WordPress being those that are in the attached patches, and
everything seems to work seamlessly.
By the way, I am quite new to WordPress, so I added the needs-testing tag,
because it does, but I also want to make sure I've done everything the
'WordPress' way and I want to make sure I havn't missed anything that is
broken because of these small changes.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/17924>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list