¿Hay alguna forma de renombrar el nombre del rol de usuario sin un plugin?

15 jul 2011, 10:53:10
Vistas: 32.2K
Votos: 29

¿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

2
Comentarios

¿Podrías ampliar sobre lo que quieres lograr?

BjornW BjornW
15 jul 2011 18:50:43

renombrar el nombre del rol de usuario, eso es todo. por ejemplo, administrator -> owner

Sean Lee Sean Lee
15 jul 2011 20:46:19
Todas las respuestas a la pregunta 6
3
49
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/

2 sept 2011 09:31:04
Comentarios

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.

Zeth Zeth
16 mar 2019 18:06:15

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

Mark Mark
4 jun 2019 19:19:33

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.

Jhonatan Villena Jhonatan Villena
9 feb 2022 05:18:08
2

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';
} );
12 ago 2020 20:58:24
Comentarios

Esta es la mejor respuesta

OsDev OsDev
31 ago 2021 22:25:36

Consejo: Este código funciona dentro de un plugin o mu-plugin. No funciona dentro de un tema hijo, ya que el tema hijo se carga demasiado tarde para el hook wp_roles_init.

Philipp Philipp
24 mar 2022 18:45:31
0

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:

  1. Obtén el array serializado:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Deserializa el string – php: $rolesArray = unserialize($serialized_string)
  3. Cambia el nombre del rol – php: $rolesArray['role_key']['name'] = "Nuevo nombre"
  4. Serializa nuevamente el array – php: echo serialize($rolesArray)
  5. 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:

  1. duplica el rol existente – $ wp role create nuevo_rol 'Nuevo Rol' --clone=rol_antiguo
  2. elimina el antiguo – $ wp role delete rol_antiguo
  3. luego asocia nuevo_rol al/los usuario(s).
  4. eventualmente repite los pasos 1 y 2 hasta que rol_antiguo = nuevo_rol
15 sept 2016 16:01:57
1

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

16 jul 2011 00:04:14
Comentarios

Intenté evitarlo, pero supongo que es la forma más limpia de hacerlo sin un plugin.

Sean Lee Sean Lee
16 jul 2011 01:16:21
1

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");

15 jul 2011 23:41:21
Comentarios

Ya probé este método, pero algunos menús desplegables no se tradujeron.

Sean Lee Sean Lee
16 jul 2011 01:15:15
0

Puedes editarlo directamente en tu base de datos, y se modificará permanentemente para tu sitio web. Aquí es donde WordPress guarda los roles de usuario:

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
13 ago 2015 20:58:36