Există o modalitate de a redenumi numele unui rol de utilizator fără plugin?

15 iul. 2011, 10:53:10
Vizualizări: 32.2K
Voturi: 29

Există vreo modalitate de a redenumi numele unui rol de utilizator folosind hook-uri, în loc să folosești un plugin?

Editare

De exemplu, administrator » owner

2
Comentarii

Poți să elaborezi ce anume dorești să realizezi?

BjornW BjornW
15 iul. 2011 18:50:43

redenumesc numele rolului de utilizator, asta e tot. de exemplu, administrator -> proprietar

Sean Lee Sean Lee
15 iul. 2011 20:46:19
Toate răspunsurile la întrebare 6
3
49
function change_role_name() {
    global $wp_roles;

    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();

    //Puteți lista toate rolurile disponibile în prezent astfel...
    //$roles = $wp_roles->get_names();
    //print_r($roles);

    //Puteți înlocui "administrator" cu orice alt rol "editor", "author", "contributor" sau "subscriber"...
    $wp_roles->roles['administrator']['name'] = 'Proprietar';
    $wp_roles->role_names['administrator'] = 'Proprietar';           
}
add_action('init', 'change_role_name');

http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

2 sept. 2011 09:31:04
Comentarii

Nu am reușit să fac asta să funcționeze. Indiferent ce încerc, tot apare ca 'Subscribers' în procesul de creare din backend. Se pare că $wp_roles acum are o parte [role_objects] în array-ul său.

Zeth Zeth
16 mar. 2019 18:06:15

Asta a făcut ceva foarte ciudat. A afectat doar prima literă ("Odministrator")!

Mark Mark
4 iun. 2019 19:19:33

Această soluție nu va actualiza intrarea din baza de date. Tu actualizezi numele pentru instanța curentă, dacă această acțiune nu se declanșează, poate strica logica ta. Nu există nicio metodă în Wp_Role pentru salvare. Cea mai bună metodă este $roles = get_option('user_roles'); $roles['administrator']['name'] = "Owner"; update_option('user_roles', $roles); acel fragment de cod va trebui să fie rulat o singură dată.

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

Dacă utilizați WP versiunea 4.7+ puteți realiza acest lucru folosind acțiunea wp_roles_init astfel:

add_action( 'wp_roles_init', static function ( \WP_Roles $roles ) {
    $roles->roles['administrator']['name'] = 'Proprietar';
    $roles->role_names['administrator'] = 'Proprietar';
} );
12 aug. 2020 20:58:24
Comentarii

Acesta este cel mai bun răspuns

OsDev OsDev
31 aug. 2021 22:25:36

Sfat: Acest cod funcționează în interiorul unui plugin sau mu-plugin. Nu funcționează într-un child-theme, deoarece child theme-ul este încărcat prea târziu pentru hook-ul wp_roles_init.

Philipp Philipp
24 mar. 2022 18:45:31
0

De fapt, există mai multe moduri de a realiza acest lucru:

Folosind doar php și mysql poți edita intrarea serializată din baza de date. Într-adevăr, Wordpress stochează array-ul serializat de roluri în tabelul wp_options.

Deci:

  1. Preia array-ul serializat:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Deserializează șirul – php: $rolesArray = unserialize($serialized_string)
  3. Schimbă numele rolului – php: $rolesArray['role_key']['name'] = "Noul nume"
  4. Serializează din nou array-ul – php: echo serialize($rolesArray)
  5. Înlocuiește conținutul option_value din baza de date cu rezultatul de la punctul anterior

Dacă te simți încrezător cu Wordpress, poți folosi chiar REPL-ul integrat al Wordpress în wp-cli pentru a prelua valoarea stocată cu get_option('wp_user_roles') și apoi folosește update_option pentru a o actualiza.

Și (întotdeauna) amintește să faci backup la baza de date înainte de manipularea opțiunilor ;)


În caz contrar, dacă nu te interesează valoarea role_key...

...este foarte ușor să realizezi asta cu wp-cli:

  1. duplică rolul existent – $ wp role create new_role 'Noul Rol' --clone=old_role
  2. șterge cel vechi – $ wp role delete old_role
  3. apoi asociază new_role utilizatorului/ilor.
  4. eventual repetă pasul 1 și 2 până când old_role = new_role
15 sept. 2016 16:01:57
1

O soluție simplă ar fi să adaugi un rol de utilizator folosind add_role, astfel poți să-i dai orice nume dorești și să adaugi orice capabilități vrei. http://codex.wordpress.org/Function_Reference/add_role

16 iul. 2011 00:04:14
Comentarii

Am încercat să evit acest lucru, dar cred că este cea mai curată metodă de a face fără un plugin.

Sean Lee Sean Lee
16 iul. 2011 01:16:21
1

Puteți crea un fișier personalizat de localizare. Descărcați acest fișier: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot și editați-l folosind un instrument precum PoEdit. În pasul următor, salvați fișierul de localizare ca en_GB.mo (sau alt nume) și editați fișierul wp-config:

define ("WPLANG", "en_GB");

15 iul. 2011 23:41:21
Comentarii

Am încercat deja această metodă, dar unele meniuri derulante nu au fost traduse.

Sean Lee Sean Lee
16 iul. 2011 01:15:15
0

Puteți să-l editați direct în baza de date, iar modificările vor fi permanente pentru site-ul dvs. Iată unde WP stochează rolurile utilizatorilor

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