Ich war überrascht festzustellen, dass add_role () die Datenbank ändert und fehlschlägt, wenn die Rolle bereits vorhanden ist. Hier gibt es zwei Implikationen, eine ist schwerwiegender als die andere: 1) Wenn Sie sich in der Entwicklung befinden und Ihren add_role-Code aktualisieren, müssen Sie zuerst remove_role (). 2) Sobald Sie es richtig haben, sollten Sie diesen Code niemals ausführen müssen nochmal.
Normalerweise habe ich meine add_role () in einen wp_loaded-Aktions-Hook eingefügt. Und da ich gerade in der Entwicklung bin, habe ich auch eine remove_role () vor meiner add_role hinzugefügt, damit ich sicher sein kann, dass meine Liste der Großbuchstaben wirksam wird, wenn ich sie ändere.
Dies wird jetzt jedoch jedes Mal ausgeführt, wenn auf eine Seite des Blogs zugegriffen wird. Okay, ich könnte es in eine Nur-Administrator-Aktion einfügen, oder ich könnte eine Plug-In-Seite unter Benutzer oder Tools erstellen, auf der diese Rolle einmal erstellt werden kann. Ich hoffe, es gibt eine einfachere und elegantere Lösung.
Ich kann mir nicht vorstellen, dass es eine Art von Run_once-Aktion gibt.
Oder ist es die beste Vorgehensweise, einfach die Rolle hinzuzufügen und dann mehrmals add_cap () zu verwenden? Und selbst dann stelle ich mir vor, dass add_cap auf die Datenbank zugreift.
Ich denke nur an den besten Weg, um unnötigen Datenbankzugriff zu reduzieren. Was sind Ihre Best Practices?
quelle
remove_role()
Funktionenadd_role()
hat mir bereits geholfen.Antworten:
Die Benutzerrollen und -funktionen werden in der Datenbank gespeichert, sodass
add_role()
WordPress diese Rolle genau wie die eingebauten Rollen kennt, sobald Sie sie verwendet und beim nächsten Laden wieder geladen haben.Wenn Sie sich die Funktion in Zeile 141
add_role()
genauer ansehen, werden Sie feststellen, dass sie nur dann die Rolle und die Funktionen in der Datenbank speichert, wenn die Variable auf true gesetzt ist (was standardmäßig der Fall ist), sodass Sie sie einfach ändern können, bevor Sie Ihre aufrufen Funktion und die Rolle werden nicht gespeichert.$use_db
add_role()
Versuchen:
Aktualisieren:
Wenn es sich in einer Test- / Entwicklungsumgebung befindet, sehe ich keinen Nachteil, aber wenn Sie sich in einer Live-Umgebung befinden, sparen Sie die Zeit, die erforderlich ist, um diese Funktion bei jedem Laden zu erstellen.
Was das einmalige Ausführen von Best Practices angeht, wenn Sie in einem Plugin
register_activation_hook
etwas anderes verwenden sollten, verwende ich eine einfache benutzerdefinierte bedingte Funktion:quelle