Is there anyway to rename a user role name via hook, instead of using plugin?
Edit
For example, administrator » owner
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
function change_role_name() {
global $wp_roles;
if ( ! isset( $wp_roles ) )
$wp_roles = new WP_Roles();
//You can list all currently available roles like this...
//$roles = $wp_roles->get_names();
//print_r($roles);
//You can replace "administrator" with any other role "editor", "author", "contributor" or "subscriber"...
$wp_roles->roles['administrator']['name'] = 'Owner';
$wp_roles->role_names['administrator'] = 'Owner';
}
add_action('init', 'change_role_name');
http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/
Method 2
Actually, there are many ways to achieve that:
With pure php and mysql you can edit the serialized entry in the db. Indeed, WordPress stores the serialized array of roles in wp_options table.
So:
- Fetch the serialized array:
SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles'; - Unserialize the string – php:
$rolesArray = unserialize($serialized_string) - Change the role name – php:
$rolesArray['role_key']['name'] = "New name" - Serialize back the array – php:
echo serialize($rolesArray) - Replace the db
option_valuecontent with output from the previous point
If you feel confident with WordPress, you can even use the embedded WordPress REPL in wp-cli to fetch the stored value with get_option('wp_user_roles') and then use update_option to update it.
And (always) remember to backup the db before options manipulation 😉
Otherwise, if you don’t care about role_key value…
…it’s very easy to achieve that with wp-cli:
- duplicate the existing role –
$ wp role create new_role 'New Role' --clone=old_role - delete the old one –
$ wp role delete old_role - then associate new_role to the user(s).
- eventually repeat step 1 and 2 until old_role = new_role
Method 3
If you are using WP version 4.7+ you may accomplish this using the wp_roles_init action like so:
add_action( 'wp_roles_init', static function ( WP_Roles $roles ) {
$roles->roles['administrator']['name'] = 'Owner';
$roles->role_names['administrator'] = 'Owner';
} );
Method 4
A simple solution would be to just add a user role using add_role, that way you can name it whatever you want and add whatever capabilities you want.
http://codex.wordpress.org/Function_Reference/add_role
Method 5
You can create a custom localization file. Get this file: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot and edit using PoEdit tool (for example). In next step save localization file as en_GB.mo (or other) and edit wp-config file:
define (“WPLANG”, “en_GB”);
Method 6
You can edit it directly in your DB, and it will be edited permanently for your website. Here is where WP keeps user roles
SELECT * from blog_options WHERE option_name = 'blog_user_roles'
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0