If you don’t care about role_key value…
…it’s very easyActually, there are many ways to achieve that with wp-cli:
- duplicate the existing role –
$ wp role create new_role 'New Role' --clone=old_role
- then delete the old one –
$ wp role delete old_role
- and last reassociate the user(s).
Otherwise…
…youWith pure php and mysql you can edit the serialized entry in the db.
Wordpress 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