Come rinominare il nome del ruolo utente senza plugin?
C'è un modo per rinominare il nome di un ruolo utente tramite hook, invece di utilizzare un plugin?
Modifica
Per esempio, administrator
» owner

function change_role_name() {
global $wp_roles;
if ( ! isset( $wp_roles ) )
$wp_roles = new WP_Roles();
//Puoi elencare tutti i ruoli attualmente disponibili così...
//$roles = $wp_roles->get_names();
//print_r($roles);
//Puoi sostituire "administrator" con qualsiasi altro ruolo "editor", "author", "contributor" o "subscriber"...
$wp_roles->roles['administrator']['name'] = 'Proprietario';
$wp_roles->role_names['administrator'] = 'Proprietario';
}
add_action('init', 'change_role_name');
http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Non sono riuscito a farlo funzionare. Non importa cosa faccia, nel backend continua a chiamarsi 'Subscribers'. Sembra che $wp_roles
ora abbia una parte [role_objects]
nel suo array.

Questo ha fatto qualcosa di molto strano. Ha modificato solo la prima lettera ("Odministrator")!

Questa soluzione non aggiorna la voce nel database. Stai aggiornando il nome per l'istanza corrente, se questa azione non viene eseguita, può compromettere la tua logica. Non esiste un metodo in Wp_Role per salvare. Il modo migliore è usare $roles = get_option('user_roles'); $roles['administrator']['name'] = "Owner"; update_option('user_roles', $roles);
questo snippet dovrà essere eseguito solo una volta.

Se stai utilizzando la versione di WP 4.7+ puoi ottenere questo risultato utilizzando l'azione wp_roles_init
in questo modo:
add_action( 'wp_roles_init', static function ( \WP_Roles $roles ) {
$roles->roles['administrator']['name'] = 'Proprietario';
$roles->role_names['administrator'] = 'Proprietario';
} );

In realtà, ci sono molti modi per ottenere questo risultato:
Con PHP e MySQL puri puoi modificare direttamente l'entrata serializzata nel database. Infatti, WordPress memorizza l'array serializzato dei ruoli nella tabella wp_options
.
Quindi:
- Recupera l'array serializzato:
SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
- Deserializza la stringa – PHP:
$rolesArray = unserialize($serialized_string)
- Modifica il nome del ruolo – PHP:
$rolesArray['role_key']['name'] = "Nuovo nome"
- Serializza nuovamente l'array – PHP:
echo serialize($rolesArray)
- Sostituisci il contenuto di
option_value
nel database con l'output ottenuto nel punto precedente
Se ti senti sicuro con WordPress, puoi persino utilizzare il REPL integrato di WordPress in wp-cli per recuperare il valore memorizzato con get_option('wp_user_roles')
e poi usare update_option
per aggiornarlo.
E (sempre) ricorda di fare un backup del database prima di manipolare le opzioni ;)
In alternativa, se non ti interessa il valore di role_key...
...è molto semplice ottenere il risultato con wp-cli:
- duplica il ruolo esistente –
$ wp role create nuovo_ruolo 'Nuovo Ruolo' --clone=vecchio_ruolo
- elimina quello vecchio –
$ wp role delete vecchio_ruolo
- poi associa nuovo_ruolo all'utente/i.
- eventualmente ripeti i passi 1 e 2 finché vecchio_ruolo = nuovo_ruolo

Una soluzione semplice sarebbe quella di aggiungere un ruolo utente utilizzando add_role
, in questo modo puoi chiamarlo come vuoi e aggiungere le capacità che desideri.
http://codex.wordpress.org/Function_Reference/add_role

Puoi creare un file di localizzazione personalizzato. Scarica questo file: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot e modificarlo utilizzando lo strumento PoEdit (ad esempio). Nel passaggio successivo salva il file di localizzazione come en_GB.mo (o altro) e modifica il file wp-config:
define ("WPLANG", "en_GB");
