it-swarm.com.de

Benutzerdefinierte Rolle, mit der Benutzer "Zur Überprüfung einreichen" statt "Veröffentlichen" können

Die Funktionalität, die ich erreichen möchte, ist eine Benutzerrolle, die es dem Benutzer ermöglicht, Entwürfe von Änderungen einzureichen, aber keine Änderungen zu veröffentlichen. Ihre Änderungen müssen von einem Editor oder einem Benutzer mit einer höheren Rolle veröffentlicht werden.

Ich habe mich ein bisschen in diesem Stapelaustausch umgesehen und keine Lösungen gefunden, die für meine Bedürfnisse zu funktionieren scheinen. Ich würde es vorziehen, Plugins zu vermeiden und diese Funktionalität direkt in meine functions.php-Datei zu integrieren.

Ich arbeite in einer nicht aktiven Sandbox-Umgebung, daher habe ich keine großen Bedenken, beim Testen verschiedener Lösungen irgendetwas zu beschädigen. Soweit habe ich:

 $role_object = get_role( 'contributor' );
 $role_object->add_cap( 'edit_pages' );
 $role_object->add_cap( 'edit_others_pages' );
 $role_object->add_cap( 'edit_published_pages' );
 $role_object->add_cap( 'upload_files' );
 $role_object->remove_cap( 'publish_posts' );
 $role_object->remove_cap( 'publish_pages' );

add_filter('wp_insert_post_data','re_aprove');
 function re_aprove($data , $postarr){
    global $current_user;
    get_currentuserinfo();
    //check if current user is not admin
    if (!current_user_can('manage_options')){
        if ($data['post_status'] == "publish"){
            $data['post_status'] = "pending";
        }
    }
    return $data;
 }

Die zweite Funktion wurde hier gefunden, aber ich vermute, dass es eine veraltete Lösung ist, da sie bei mir nicht richtig zu funktionieren scheint und ich einen Beitrag gefunden habe, der sie aus dem Jahr 2010 enthält.

Die Art und Weise, wie diese Lösung nicht funktioniert, hat mich am Kopf kratzen lassen. Als Mitwirkender kann ich für jede Seite zur Bearbeitungsseite wechseln, jedoch wird anstelle der Schaltfläche "Zur Überprüfung einreichen" die Schaltfläche "Aktualisieren" angezeigt. Wenn Sie auf die Schaltfläche "Aktualisieren" klicken, wird die Bearbeitungsseite aktualisiert und stattdessen die Schaltfläche "Zur Überprüfung einreichen" angezeigt. Auf der Dashboard-Seite "Seiten" wird die aktualisierte Seite als "Ausstehend" angezeigt. So weit so gut zum größten Teil. Das Problem ist, dass die Seite jetzt 404s auf dem Front-End ist. Durch "Aktualisieren" als Mitwirkender wurde die Veröffentlichung der Seite aufgehoben, was nicht das ist, wonach ich gesucht habe.

Alle Gedanken, Vorschläge oder Lösungen werden sehr geschätzt. Ich denke, diese Funktionalität wäre für viele Leute sehr wünschenswert.

Vielen Dank für Ihre Zeit.

1
PersonNinja

Es hängt wirklich davon ab, ob Sie diese neuen Rollen auf einen bestimmten Beitragstyp beschränken möchten. Wenn Sie nach "Workflow-Plugins" suchen, finden Sie mehrere vorgefertigte Lösungen. Einige lassen nur die neuen Rollen Seiten bearbeiten, andere erlauben es ihnen, einen beliebigen Beitragstyp zu bearbeiten.

Ich habe eine Website erstellt, die Benutzer benötigt, die sich nur auf ein bestimmtes CPT auswirken können. So hatten wir beispielsweise "Bearbeiter" für CPT1, die nur "zur Überprüfung einreichen" konnten, und dann "Genehmiger" für CPT1, die bearbeiten und veröffentlichen konnten. Wir hatten auch "Editoren" für CPT2 und "Genehmiger" für CPT2 usw., sodass die Benutzer nur Änderungen an der zugewiesenen CPT vornehmen konnten.

Der erste Schritt bestand darin, map_meta_cap bei der Registrierung der CPTs zu verwenden, wodurch für jeden CPT ein ganz neuer Satz von Berechtigungen erstellt wurde. Der zweite Schritt war komplizierter und etwas hackig. Zuerst habe ich dem Administrator ein Noscript-Tag hinzugefügt, damit jeder mit deaktiviertem JS nicht herumkommen und Dinge bearbeiten oder veröffentlichen kann. Ich habe Quick Edit entfernt und das automatische Speichern deaktiviert. Die einzige Möglichkeit, CPTs zu aktualisieren, bestand darin, mit aktiviertem JS zum vollständigen Editorbildschirm zu wechseln.

Von dort aus habe ich mich an admin_footer-post.php angeschlossen und die Berechtigungen überprüft. Wenn der aktuelle Benutzer das CPT, das er gerade bearbeitet, nicht veröffentlichen oder bearbeiten konnte, habe ich jQuery verwendet, um die Schaltfläche "Veröffentlichen" in "Änderungen speichern" zu ändern, und die Formularaktion in meine eigene Plug-in-URL geändert. Das Plug-in übernimmt alle POST Daten und fügt programmgesteuert einen neuen Beitrag mit einem benutzerdefinierten Status ein. Anschließend wird eine E-Mail an die "Genehmigenden" für dieses CPT mit Anweisungen zur Überprüfung gesendet. Sie werden zum Revisionsvergleich weitergeleitet Bildschirm.

Ich mag es nicht, dass es auf JS basiert, und ich mag es nicht, Core-Publishing-Funktionen zu überschreiben, aber bis jetzt habe ich, abgesehen von einem anderen Plugin, das im Grunde das Gleiche tut, die einzige Möglichkeit gefunden, mit mehreren benutzerdefinierten Workflows umzugehen.

1
WebElaine