Există o modalitate de a redenumi numele unui rol de utilizator fără plugin?
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

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/

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.

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

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ă.

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';
} );

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:
- Preia array-ul serializat:
SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
- Deserializează șirul – php:
$rolesArray = unserialize($serialized_string)
- Schimbă numele rolului – php:
$rolesArray['role_key']['name'] = "Noul nume"
- Serializează din nou array-ul – php:
echo serialize($rolesArray)
- Î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:
- duplică rolul existent –
$ wp role create new_role 'Noul Rol' --clone=old_role
- șterge cel vechi –
$ wp role delete old_role
- apoi asociază new_role utilizatorului/ilor.
- eventual repetă pasul 1 și 2 până când old_role = new_role

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

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