A quale azione dovrei agganciare quando aggiungo ruoli e capacità?


10

Userò add_role () e $ role-> add_cap () per impostare un nuovo ruolo personalizzato e collegare una nuova funzionalità ai ruoli esistenti.

Mi chiedo dove sia il posto migliore per farlo? Ovviamente posso farlo direttamente all'interno di Functions.php e finirlo. Ma è questa la migliore pratica? Devo solo farlo su admin_init? o dovrei farlo su init?

Non sono del tutto sicuro di quali siano le migliori pratiche usando gli hook di azione di init piuttosto che semplicemente lanciare una chiamata di funzione diretta all'interno di Functions.php.

grazie per il tuo contributo!

Risposte:


10

Quando si aggiungono un ruolo e funzionalità è necessario eseguire il codice una sola volta poiché i ruoli e le funzionalità vengono salvati nel database durante l'utilizzo add_roleo le ->add_capfunzioni, proprio come Andy ha detto che è possibile utilizzare after_setup_themeper questo tipo di azione, ma aggiungere un tipo di controllo in modo che solo viene eseguito una volta, come register_activation_hook o utilizzando le opzioni:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

Grazie per questo. È vero che add_role o add_cap sfruttano SEMPRE il database? Quando ho scavato nel codice sorgente mi è sembrato che non fosse sempre così - cioè: nella maggior parte dei metodi di WP_Roles, c'è un controllo per if ($ this-> use_db), che mi fa pensare che ci sia la possibilità che i ruoli potrebbe non essere sempre memorizzato nel DB.
Tom Auger,

Inoltre, piuttosto che impostare un flag usando le opzioni, che non mi sembra particolarmente scalabile, non c'è modo di interrogare semplicemente se il ruolo è stato creato? In caso contrario, quale danno farebbe per ridefinire il ruolo se fosse già lì? Avresti un ruolo duplicato o lo ignorerebbe? Guardando di nuovo capacitÃ.php, lo vedo in add_role: if (isset ($ this-> ruoli [$ role])) return; che sembra indicare che non duplicherà il ruolo, quindi nessun danno fatto.
Tom Auger,

Non sono sicuro di cosa intendi, ma il valore è $use_db = true;nella classe WP_Roles. e per quanto riguarda l'impostazione di un flag usando le opzioni, è un esempio che puoi usare register_activation_hookma l'idea è che il tuo codice verrebbe eseguito una sola volta e in questo modo risparmierai il tempo di escissione.
Bainternet,

Non l'ho mai visto, ma mi sembra che possa avere senso inserire i cambiamenti di ruolo in un plug-in e quindi sfruttare gli hook di attivazione / disattivazione per attivare le modifiche una sola volta. Qualcuno ha mai seguito quella strada?
mrwweb,

@mrwweb che dovrebbe funzionare altrettanto bene
Bainternet,

7

Per i plugin, ho avuto successo usando plugins_loadedper questo. Per i temi, vorrei usare after_setup_theme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.