Welche Aktion sollte ich ausführen, wenn ich Rollen und Funktionen hinzufüge?

10

Ich werde add_role () und $ role-> add_cap () verwenden, um eine neue benutzerdefinierte Rolle einzurichten und vorhandenen Rollen eine neue Funktion hinzuzufügen.

Ich frage mich, wo der beste Ort dafür ist? Natürlich kann ich es direkt in functions.php machen und damit fertig sein. Aber ist das die beste Vorgehensweise? Muss ich das nur auf admin_init tun? oder soll ich es auf init machen?

Ich bin mir nicht ganz sicher, welche Best Practices es gibt, Init-Action-Hooks zu verwenden, anstatt nur einen direkten Funktionsaufruf in functions.php zu löschen.

danke für deinen Beitrag!

Tom Auger
quelle

Antworten:

10

Wenn eine Rolle und Fähigkeiten Hinzufügen müssen Sie nur den Code auszuführen , wenn da die Rollen und Funktionen in der Datenbank gespeichert sind , bei der Verwendung add_roleoder ->add_capFunktionen so einfach wie Andy sagte , Sie können after_setup_themefür diese Art von Aktion , sondern eine Art von Kontrolle , so dass es nur hinzufügen wird einmal ausgeführt, wie register_activation_hook oder mit Optionen:

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);
    }
}
Bainternet
quelle
Danke dafür. Stimmt es, dass add_role oder add_cap IMMER die Datenbank nutzen? Als ich mich in den Quellcode vertiefte, schien dies nicht immer der Fall zu sein - dh: In den meisten Methoden von WP_Roles wird geprüft, ob ($ this-> use_db), was mich glauben lässt, dass die Möglichkeit besteht, dass Rollen wird möglicherweise nicht immer in der Datenbank gespeichert.
Tom Auger
Gibt es nicht eine Möglichkeit, einfach zu fragen, ob die Rolle erstellt wurde, anstatt ein Flag mit Optionen zu setzen, was mir nicht besonders skalierbar erscheint? Andernfalls würde es schaden, die Rolle neu zu definieren, wenn sie bereits vorhanden ist. Würden Sie eine doppelte Rolle bekommen oder würde sie einfach ignorieren? Wenn ich noch einmal auf functions.php schaue, sehe ich dies unter add_role: if (isset ($ this-> role [$ role])) return; Dies scheint darauf hinzudeuten, dass die Rolle nicht dupliziert wird, sodass kein Schaden angerichtet wird.
Tom Auger
Ich bin mir nicht sicher, was du meinst, aber der Fehler befindet sich $use_db = true;in der Klasse WP_Roles. Das Setzen eines Flags mithilfe von Optionen ist ein Beispiel, das Sie verwenden können. register_activation_hookDie Idee ist jedoch, dass Ihr Code nur einmal ausgeführt wird und Sie sich so die Zeit der Ausführung sparen.
Bainternet
Ich habe das noch nie durchschaut, aber es fällt mir auf, dass es möglicherweise sinnvoll ist, Rollenwechsel in ein Plugin einzufügen und dann die Aktivierungs- / Deaktivierungs-Hooks zu nutzen, um die Änderungen nur einmal auszulösen. Hat jemand jemals diesen Weg gegangen?
Mrwweb
@ Mrwweb, das sollte auch gut funktionieren
Bainternet
7

Für Plugins hatte ich Erfolg plugins_loadeddamit. Für Themen würde ich verwenden after_setup_theme.

Andy
quelle