web-dev-qa-db-de.com

Verhindern Sie, dass Autoren sich gegenseitig Beiträge anzeigen

Ich richte eine Site ein, auf der es mehrere Benutzer als Autor geben wird. Der Eigentümer möchte nicht, dass die Autoren die Beiträge der anderen Autoren anzeigen können, da es einige Metafelder mit Informationen gibt, die er lieber nicht zwischen den Autoren geteilt hätte .

Gibt es eine Möglichkeit, die Anzeige von Beiträgen anderer Autoren zu deaktivieren?

Danke, Chuck

Um ein bisschen mehr zu verdeutlichen, ist dies für die Admin-Seite gedacht. Oben unter den Posts befinden sich Links für meine und alle, die veröffentlicht wurden. Ich möchte nur, dass Autoren "meine" sehen.

5
Chuck

Wenn Sie verhindern möchten, dass ein Benutzer mit der Rolle "Autor" die Beiträge anderer Benutzer im Übersichtsbildschirm anzeigt (die Details können ohnehin nicht angezeigt werden), können Sie dem Autor einen zusätzlichen Filter hinzufügen:

add_action( 'load-edit.php', 'wpse14230_load_edit' );
function wpse14230_load_edit()
{
    add_action( 'request', 'wpse14230_request' );
}

function wpse14230_request( $query_vars )
{
    if ( ! current_user_can( $GLOBALS['post_type_object']->cap->edit_others_posts ) ) {
        $query_vars['author'] = get_current_user_id();
    }
    return $query_vars;
}

Die kleinen Links über der Post-Tabelle ("Mein", "Alle", "Entwürfe") sind jetzt weniger nützlich. Sie können sie auch entfernen:

add_filter( 'views_edit-post', 'wpse14230_views_edit_post' );
function wpse14230_views_edit_post( $views )
{
    return array();
}
11
Jan Fabry

Ich musste heute so etwas machen und deswegen habe ich diesen Beitrag gefunden. Was ich fand, dass es für mich funktioniert, war dieser Beitrag mit dem Titel: " So beschränken Sie Autoren auf ihre eigenen Beiträge in WordPress Admin " von wpbeginner

Hier ist der Code, den du in deine functions.php einfügen kannst:

function posts_for_current_author($query) {
    global $pagenow;

    if( 'edit.php' != $pagenow || !$query->is_admin )
        return $query;

    if( !current_user_can( 'edit_others_posts' ) ) {
        global $user_ID;
        $query->set('author', $user_ID );
    }
    return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');
1
Armando Duran

Genau das macht die Standardrolle "Autor". http://codex.wordpress.org/Roles_and_Capabilities

1
Wyck

Überprüfen Sie einfach die Fähigkeiten (siehe Link von @Wyck) und die Autoren-ID in Ihren Vorlagen und fügen Sie die Dinge, die andere nicht sehen sollen, in eine if/else-Prüfung ein:

// Get the author of this post:
$post_author = get_query_var('author_name') ? get_user_by( 'slug', get_query_var('author_name') ) : get_userdata( get_query_var('author') );

// Get data from current user:
global $current_user;
get_currentuserinfo();
// Get the display_name from current user - maybe you have to exchange it with $current_user->user_login
$current_author = $current_user->display_name;

// Check the capability and if the currently logged in user is the the post author
if ( current_user_can('some_capability') && $post_author == $current_author )
{
    // Post Meta
    $post_meta = get_post_meta( $GLOBALS['post']->ID );
    // DO OR DISPLAY STUFF HERE
}
1
kaiser

Hier finden Sie eine umfassendere Lösung (um auch die Anzahl der Posts in der Filterleiste zu korrigieren): Hilfe bei der Verdichtung/Optimierung von Arbeitscode

0
Paul