Verhindert, dass der Autor seine Beiträge ändert, wenn der Administrator Änderungen vorgenommen hat

In WordPress können Autoren standardmäßig alle Änderungen an ihren Posts erstellen und vornehmen.

Ich suche nach einer Möglichkeit, sie daran zu hindern, Änderungen an einem Beitrag vorzunehmen, wenn der Administrator Änderungen an diesem bestimmten Beitrag vorgenommen hat (nachdem der Administrator auf “Aktualisieren” geklickt hat).

Bei Posts, die nicht vom Administrator geändert wurden, kann der Autor noch Änderungen vornehmen.

Ich habe eine Reihe von Benutzerrollen-Plugins durchprobiert, finde aber kein Plugin, das helfen kann.

Vielen Dank.

Solutions Collecting From Web of "Verhindert, dass der Autor seine Beiträge ändert, wenn der Administrator Änderungen vorgenommen hat"

Sie können Folgendes versuchen:

/** * Post Update Locker For Authors * If an administrator has updated the post, then lock it for author updates. * @see http://wordpress.stackexchange.com/a/168578/26350 */ add_action( 'pre_post_update', function( $post_ID, $data ) { // Target only authors: if( ! current_user_can( 'edit_post' ) || current_user_can( 'edit_others_posts' ) ) return; // Target only 'post' post types: if( get_post_type( $post_ID ) !== 'post' ) return; // Fetch all administrators: $admins_ids = get_users( array( 'role' => 'administrator', 'fields' => 'ID' ) ); // or hardcoded if needed: // $admins_ids = array( 1 ); // Check if administrators have modified the current post, by checking the revisions: $posts = get_posts( array( 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'posts_per_page' => -1, 'fields' => 'ids', 'post_parent' => $post_ID, 'post_type' => 'revision', 'post_status' => 'any', 'author__in ' => $admin_ids, ) ); // Halt if an administrator has modified the post: if( count( $posts ) > 0 ) wp_die( __( "Sorry, you can't modify this post, it's already been modified by an administrator! " ) ); }, 10, 2 ); 

Möglicherweise müssen Sie dies anpassen und weiter testen.

Aktualisieren:

Hier ist ein weiteres Beispiel, wie man die submitdiv für Autoren entfernen kann, die den aktuellen Beitrag nicht mehr aktualisieren können:

 /** * Hide the publish metabox for authors if an administrator has updated the post. * @see http://wordpress.stackexchange.com/a/168578/26350 */ add_action( 'admin_menu', function() { add_action( 'load-post.php', 'wpse_author_update_locking' ); }); function wpse_author_update_locking() { // Setup - Modify this to your needs: $admin_ids = array( 1 ); $cpt = 'post'; // User input: $_pid = filter_input( INPUT_GET, 'post', FILTER_SANITIZE_NUMBER_INT ); // Target only $cpt post types: if( get_post_type( $_pid ) !== $cpt ) return; // Target only authors: if( ! current_user_can( 'edit_post' ) || current_user_can( 'edit_others_posts' ) ) return; if( $_pid > 0 ) { // Check if administrators have modified the current post, // by checking the revisions: $posts = get_posts( array( 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'posts_per_page' => -1, 'fields' => 'ids', 'post_parent' => $_pid, 'post_type' => 'revision', 'post_status' => 'any', 'author__in ' => $admin_ids, ) ); // Halt if an administrator has modified the post: if( count( $posts ) > 0 ) { remove_meta_box( 'submitdiv', $cpt , 'side' ); add_meta_box( 'submitdivmod', __( 'Publish' ), 'wpse_post_submit_meta_box', $cpt, 'side', 'core' ); } } } function wpse_post_submit_meta_box() { _e("Sorry, you can't modify this post, it's already been modified by an administrator!"); } 

und dann anstelle dieser Metabox:

Die Veröffentlichung Metabox verfügbar

Der Autor sieht dies:

Die Veröffentlichung Metabox nicht verfügbar