¿Hay alguna forma de renombrar el nombre del rol de usuario sin un plugin?
¿Hay alguna manera de renombrar un nombre de rol de usuario mediante un hook, en lugar de usar un plugin?
Editar
Por ejemplo, administrator
» owner

function change_role_name() {
global $wp_roles;
if ( ! isset( $wp_roles ) )
$wp_roles = new WP_Roles();
//Puedes listar todos los roles actualmente disponibles así...
//$roles = $wp_roles->get_names();
//print_r($roles);
//Puedes reemplazar "administrator" con cualquier otro rol "editor", "author", "contributor" o "subscriber"...
$wp_roles->roles['administrator']['name'] = 'Propietario';
$wp_roles->role_names['administrator'] = 'Propietario';
}
add_action('init', 'change_role_name');
http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

No pude hacer que esto funcionara. No importa lo que haga, sigue apareciendo como 'Subscriptores' en el proceso de creación del backend. Parece que $wp_roles
ahora tiene una parte [role_objects]
en su array.

Esto hizo algo muy extraño. ¡Solo afectó la primera letra ("Odministrador")!

Esta solución no actualizará la entrada en la base de datos. Estás actualizando el nombre para la instancia actual, si esta acción no se dispara, puede arruinar tu lógica. No hay ningún método en Wp_Role para guardar. La mejor manera es $roles = get_option('user_roles'); $roles['administrator']['name'] = "Propietario"; update_option('user_roles', $roles);
ese fragmento solo necesitará ejecutarse una vez.

Si estás utilizando la versión 4.7+ de WP, puedes lograr esto usando la acción wp_roles_init
de la siguiente manera:
add_action( 'wp_roles_init', static function ( \WP_Roles $roles ) {
$roles->roles['administrator']['name'] = 'Propietario';
$roles->role_names['administrator'] = 'Propietario';
} );

En realidad, hay muchas formas de lograr eso:
Con PHP puro y MySQL puedes editar la entrada serializada en la base de datos. De hecho, WordPress almacena el array serializado de roles en la tabla wp_options
.
Entonces:
- Obtén el array serializado:
SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
- Deserializa el string – php:
$rolesArray = unserialize($serialized_string)
- Cambia el nombre del rol – php:
$rolesArray['role_key']['name'] = "Nuevo nombre"
- Serializa nuevamente el array – php:
echo serialize($rolesArray)
- Reemplaza el contenido de
option_value
en la base de datos con el resultado del punto anterior
Si te sientes cómodo con WordPress, incluso puedes usar el REPL integrado de WordPress en wp-cli para obtener el valor almacenado con get_option('wp_user_roles')
y luego usar update_option
para actualizarlo.
Y (siempre) recuerda hacer una copia de seguridad de la base de datos antes de manipular las opciones ;)
De lo contrario, si no te importa el valor de role_key…
…es muy fácil lograrlo con wp-cli:
- duplica el rol existente –
$ wp role create nuevo_rol 'Nuevo Rol' --clone=rol_antiguo
- elimina el antiguo –
$ wp role delete rol_antiguo
- luego asocia nuevo_rol al/los usuario(s).
- eventualmente repite los pasos 1 y 2 hasta que rol_antiguo = nuevo_rol

Una solución sencilla sería simplemente añadir un rol de usuario usando add_role
, de esa manera puedes nombrarlo como prefieras y añadir las capacidades que desees.
http://codex.wordpress.org/Function_Reference/add_role

Puedes crear un archivo de localización personalizado. Descarga este archivo: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot y edítalo usando la herramienta PoEdit (por ejemplo). En el siguiente paso, guarda el archivo de localización como en_GB.mo (u otro) y edita el archivo wp-config:
define ("WPLANG", "en_GB");
