web-dev-qa-db-de.com

So können Mitwirkende eine neue Revision (Entwurf) erstellen, um ihre veröffentlichten Beiträge zu bearbeiten

Ich verwende einen benutzerdefinierten Beitragstyp, damit Mitwirkende eine persönliche Seite auf der Website haben.

Jedes Mal, wenn sich ein Benutzer auf meiner Website registriert, erstellt ein Skript einen benutzerdefinierten Beitrag, der den registrierten Benutzer als Autor enthält.

Um die Beiträge der Benutzer zu moderieren, wird dieser Beitrag von einem Redakteur veröffentlicht.

Ich möchte, dass Benutzer (Mitwirkende):

  • andere Posts dieses benutzerdefinierten Typs können nicht hinzugefügt werden.
  • in der Lage, den bereits veröffentlichten Beitrag, dessen Autor sie sind, zu bearbeiten;
  • und ihre Änderungen müssen von einem Herausgeber genehmigt werden, bevor sie veröffentlicht werden.

Ich verwende User Role Editor zum Verwalten von Rollen und Funktionen.

Gibt es eine Möglichkeit, das zu tun?

5
bluantinoo

Mithilfe des Rolleneditors oder des Rollenbereichs können Sie festlegen, dass Mitwirkende Ihren benutzerdefinierten Beitragstyp bearbeiten, aber nicht veröffentlichen. Jede Änderung wird bis zur Genehmigung als Entwurf festgelegt. Um die Erstellung neuer Beiträge Ihres benutzerdefinierten Beitragstyps einzuschränken, können Sie mein Plugin verwenden. Erstellungsbeschränkungen für Bainternet-Posts

Aktualisieren

Um die erneute Genehmigung von Änderungen zu erzwingen, fügen Sie diesen Code hinzu

add_filter( 'wp_insert_post_data', 're_aprove', '99', 2 );
function re_aprove( $data, $postarr ) {
    //check if current user is not admin
    if ( ! current_user_can( 'manage_options' ) && 'YOUR_CUSTOM_TYPE' === $postarr['post_type'] ) {
        if ( 'publish' === $data['post_status'] ) {
            $data['post_status'] = 'pending';
        }
    }
    return $data;
}

und YOUR_CUSTOM_TYPE in den Namen Ihres benutzerdefinierten Beitragstyps ändern.

5
Bainternet

Meins funktionierte nicht, bis ich die '99' hinzufügte, 2); bis zum Ende des add_filters.

Hier ist der Verweis, warum: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

add_filter('wp_insert_post_data','re_aprove', '99', 2);
function re_aprove( $data , $postarr ){
    global $current_user;
    get_currentuserinfo();
    //check if current user is not admin
    if (!current_user_can('manage_options') && $postarr['post_type'] == "candy-item" ){ 
        if ($data['post_status'] = "publish"){
            $data['post_status'] = "pending";
        }
    }
    return $data;
}
3
Dave Williams

schließlich habe ich gelöst Verwenden von Revisionary Plugin, http://wordpress.org/extend/plugins/revisionary/ Es wird verwendet, um genau das zu tun, was ich im Betreff verlange Titel

für detailliertere Kontrolle über Funktionen (mit bereits integriertem Revisionary) gibt es Role Scoper http://wordpress.org/extend/plugins/role-scoper/

das erste ist sehr einfach einzurichten und zu verwenden, das zweite erfordert viel mehr Übung, die Benutzeroberfläche ist etwas verwirrend, aber sehr leistungsfähig

1
bluantinoo