Is there way to rename user role name without plugin?
-
21-04-2021 - |
题
Is there anyway to rename a user role name via hook, instead of using plugin?
Edit
For example, administrator
» owner
解决方案
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/
其他提示
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_value
content 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
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
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';
} );
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");
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'