Come rinominare il nome del ruolo utente senza plugin?

15 lug 2011, 10:53:10
Visualizzazioni: 32.2K
Voti: 29

C'è un modo per rinominare il nome di un ruolo utente tramite hook, invece di utilizzare un plugin?

Modifica

Per esempio, administrator » owner

2
Commenti

Potresti approfondire cosa desideri ottenere?

BjornW BjornW
15 lug 2011 18:50:43

rinominare il nome del ruolo utente, tutto qui. ad esempio, administrator -> proprietario

Sean Lee Sean Lee
15 lug 2011 20:46:19
Tutte le risposte alla domanda 6
3
49
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/

2 set 2011 09:31:04
Commenti

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.

Zeth Zeth
16 mar 2019 18:06:15

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

Mark Mark
4 giu 2019 19:19:33

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.

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

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

Questa è la risposta migliore

OsDev OsDev
31 ago 2021 22:25:36

Suggerimento: Questo codice funziona all'interno di un plugin o mu-plugin. Non funziona in un child-theme, poiché il child theme viene caricato troppo tardi per l'hook wp_roles_init.

Philipp Philipp
24 mar 2022 18:45:31
0

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:

  1. Recupera l'array serializzato:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Deserializza la stringa – PHP: $rolesArray = unserialize($serialized_string)
  3. Modifica il nome del ruolo – PHP: $rolesArray['role_key']['name'] = "Nuovo nome"
  4. Serializza nuovamente l'array – PHP: echo serialize($rolesArray)
  5. 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:

  1. duplica il ruolo esistente – $ wp role create nuovo_ruolo 'Nuovo Ruolo' --clone=vecchio_ruolo
  2. elimina quello vecchio – $ wp role delete vecchio_ruolo
  3. poi associa nuovo_ruolo all'utente/i.
  4. eventualmente ripeti i passi 1 e 2 finché vecchio_ruolo = nuovo_ruolo
15 set 2016 16:01:57
1

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

16 lug 2011 00:04:14
Commenti

Ho cercato di evitarlo, ma suppongo sia il modo più pulito per farlo senza un plugin.

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

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

15 lug 2011 23:41:21
Commenti

Ho già provato questo metodo, ma alcuni menu a discesa non sono stati tradotti.

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

Puoi modificarlo direttamente nel tuo database e la modifica sarà permanente per il tuo sito web. Ecco dove WordPress memorizza i ruoli utente

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