Ich möchte ein paar Redakteure hinzuzufügen , die können edit_others_posts
, aber ich will nicht , sie in der Lage sein , zu veröffentlichen andere Beiträge, nur speichern die Post durch einen Klick auf den Absenden von Review - Taste.
Wie kann ich das machen?
EDIT: Um dies im Detail zu erklären. Derzeit können wir einem Benutzer nicht erlauben, andere Beiträge zu bearbeiten, indem wir nur den Beitrag speichern. Wenn dies edit_others_post
für den Benutzer aktiviert ist, kann er den Beitrag veröffentlichen.
Workflow, den ich anstrebe:
- Redakteure können nur andere ausstehende Beiträge bearbeiten ( hier gelöst ).
- Redakteure können den ausstehenden Beitrag speichern, aber nicht veröffentlichen. Daher steht ihnen die Schaltfläche " Zur Überprüfung senden" zur Verfügung (dies ist die Schaltfläche "Beitrag aktualisieren", wenn sich ein Beitrag im ausstehenden Modus befindet).
posts
user-roles
editor
capabilities
Christine Cooper
quelle
quelle
Antworten:
Wenn ich das gut verstehe, sollte ein Benutzer, der eine besondere Rolle auf Ihrer Website spielt, Folgendes tun:
Wenn ja, scheint es mir eine Rolle zu sein, die eher einem "Autor" als einem "Herausgeber" ähnelt.
Das ist nur der Unterschied zum Autor
Der erste Vorschlag, den ich machen kann, ist, eine benutzerdefinierte Rolle zu erstellen, wobei die Rolle "Autor" als Zeichenpunkt verwendet wird, die 3 unerwünschten Kappen entfernt und die benutzerdefinierte hinzugefügt wird, eine einfache Klasse, die dies tut:
Fügen wir die Aktion zur Aktivierung / Deaktivierung des Plugins hinzu:
Hier gehe ich davon aus, dass sich der vorherige Code in der Haupt-Plugin-Datei befindet.
Die oben festgelegten Funktionen gelten für jeden Beitrag, unabhängig vom Autor oder Beitragsstatus des Beitrags. Jetzt müssen wir dem Benutzer mit unserer benutzerdefinierten Rolle erlauben, andere Beiträge zu bearbeiten, wenn sie ausstehen.
Das erste Problem ist, dass auf dem Postlistenbildschirm (
edit.php
), wenn die Funktionedit_others_posts
für den Benutzer nicht aktiviert ist (und für unsere benutzerdefinierte Rolle nicht), Posts von anderen Benutzern nicht in der Liste angezeigt werden, da sie von entfernt wurden Die Abfrage und wenn die Abfrage erfolgt, haben wir keinen Zugriff auf die Post-Daten. Daher müssen wir nur die Funktion zuweisen, unabhängig vom Post-Status, zumindest bis die Abfrage ausgeführt wird.Das zweite Problem besteht darin, dass
edit_others_posts
wir beim Speichern, bevor wir dem Benutzer mit benutzerdefinierten Rollen die Obergrenze geben, nicht nur überprüfen müssen, ob der aktuelle Status "ausstehend" ist, sondern auch, dass der Benutzer nicht versucht, ihn zu ändern. Dies kann durch Betrachten von Informationen in$_POST
Daten erfolgen. Dies bedeutet, dass wir zwei "Routinen" benötigen, eine, die auf Administrationsbildschirmen ausgeführt wird (edit.php
undpost.php
die zweite, die während des Speicherns nach dem Speichern ausgeführt wird).Um unserem benutzerdefinierten Rollenbenutzer die
edit_others_post
Möglichkeit zu geben, nur ausstehende Beiträge zu verfassen, fügen Sie einen Filter hinzu'user_has_cap'
.Innerhalb des Filterrückrufs können wir diesen Workflow implementieren:
'edit-post'
oder'edit-others-posts'
überprüfen Sie, ob wir uns im Administrator befinden, ob der Benutzer über unsere benutzerdefinierten Funktionen verfügt und kein Editor oder Administrator ist. Wenn alle diese Bedingungen erfüllt sind, können wir dies Weiter, sonst müssen wir nichts tun, dh die ursprünglichen Fähigkeiten zurückgebenRoutine beim Speichern:
'edit-others-posts'
Funktion zu ('edit-post'
wird automatisch zugeordnet).Routine beim Nichtsparen:
'edit-others-posts'
, haben wir keine Post-Daten. Weisen Sie sie einfach zu, sondern nur, bevor die Hauptabfrage nicht bereits erfolgt und nur auf demedit.php
Bildschirm'edit-post'
, Post-Daten abzurufen, und wenn der Post aussteht, weisen Sie dem Benutzer die'edit-others-posts'
Obergrenze zu ('edit-post'
wird automatisch zugeordnet).Es gibt noch etwas zu tun. Mithilfe des beschriebenen Workflows können Benutzer in benutzerdefinierten Rollen keine Vorschau auf ausstehende Beiträge anzeigen, selbst wenn sie diese bearbeiten können.
Wir können die Funktion erneut filtern, aber es gibt einen einfacheren Weg: Während der Hauptabfrage (unter Verwendung eines der Dutzend von ausgelösten Hooks
WP_Query
) können wir einfach das$wp_post_statuses['pending']
Objekt nehmen und seinepublic
Eigenschaft auf true setzen, wenn der aktuelle Benutzer unsere benutzerdefinierte Rolle hat: Der einzige Effekt ist Ausstehende Beiträge können in der Vorschau angezeigt werden. Wenn wir keine Funktionen ändern, können wir sicher bleiben.Ok, übersetze einfach Wörter in Code:
Fügen Sie die beiden relevanten Hooks hinzu: einen zum Filtern
'user_has_cap'
, einen zum Sicherstellen, dass der Status "Ausstehend" nur von Administratoren oder echten Editoren geändert werden kann, und den letzten Filter'posts_results'
, um eine Vorschau zu ermöglichen:Sobald Sie den gesamten Code in einem Plugin haben und ihn aktivieren, müssen Sie nur den Benutzern das benutzerdefinierte Rollen-Plugin zuweisen.
Der gesamte Code ist als Plugin verfügbar, in einer Übersicht hier .
quelle