it-swarm.com.de

Deaktivieren (oder Entfernen) von "Alle Posts, Veröffentlichungen und Papierkorb" in Dashboard-Posts

Ich habe nach Möglichkeiten gesucht, um die Webseiten "Alle", "Veröffentlicht" und "Papierkorb" für USERSaußer "Ich", "Administrator"vollständig zu entfernen.

Das Szenario für mich ist also: Ich habe registrierte Benutzer (denen ich die Rollen von Autoren, Mitwirkenden usw. zuweisen möchte). Wenn sie sich jetzt auf meiner Website anmelden und auf den Bereich "Beiträge" zugreifen, möchte ich, dass sie diese drei Links nicht sehen (Alle, Veröffentlicht, Papierkorb).

Ich habe versucht, die Funktion jquery zu verwenden, die im Grunde genommen der Funktion display entspricht: none, aber ich denke nicht, dass dies die optimale Wahl ist. Ich weiß, dass es für mich bessere Möglichkeiten gibt, dies zu tun.

Ich habe unter anderem versucht, Plugins wie Member und Adminimize zu verwenden, aber ich kann nicht das richtige finden.

Ich hoffe, es gibt jemanden da draußen, der mir helfen kann. Danke im Voraus.

 Remove All, Published, and Trash 

5
chest_nut

Die WP_Posts_List_Table Klasse erweitert WP_List_Table und innerhalb der WP_List_Table::views() Methode haben wir den folgenden dynamischen views Filter:

/**
 * Filter the list of available list table views.
 *
 * The dynamic portion of the hook name, `$this->screen->id`, refers
 * to the ID of the current screen, usually a string.
 *
 * @since 3.5.0
 *
 * @param array $views An array of available list table views.
 */
 $views = apply_filters( "views_{$this->screen->id}", $views );

Daher können wir den generierten views_edit-post-Filter verwenden, um die Ansichten der Postlistentabelle anzupassen.

Beispiel:

Entfernen wir das alle, veröffentlichen, zukünftig, klebrig, Entwurf, ausstehend und Papierkorb für Nicht-Administratoren (PHP 5.4+):

/**
 * Remove the 'all', 'publish', 'future', 'sticky', 'draft', 'pending', 'trash' 
 * views for non-admins
 */
add_filter( 'views_edit-post', function( $views )
{
    if( current_user_can( 'manage_options' ) )
        return $views;

    $remove_views = [ 'all','publish','future','sticky','draft','pending','trash' ];

    foreach( (array) $remove_views as $view )
    {
        if( isset( $views[$view] ) )
            unset( $views[$view] );
    }
    return $views;
} );

hier können Sie den $remove_views an Ihre Bedürfnisse anpassen. Ein anderer Ansatz wäre, nur meins aufzunehmen und nur diese Ansicht zurückzugeben.

Dann könnten wir versuchen, die meine -Ansicht weiter zu erzwingen mit:

/**
 * Force the 'mine' view on the 'edit-post' screen
 */
add_action( 'pre_get_posts', function( \WP_Query $q )
{
    if( 
           is_admin() 
        && $q->is_main_query() 
        && 'edit-post' === get_current_screen()->id 
        && ! current_user_can( 'manage_options' )
    )
        $q->set( 'author', get_current_user_id() ); 
} );

Vorher:

 before 

Nachher: ​​

 after 

5
birgire

Diese Status werden von get_available_post_statuses() gewechselt, was wiederum seine Werte von wp_count_posts() erhält.

wp_count_posts() übergibt seine Werte an den Filter wp_count_posts. Sie können also darauf zugreifen und entführen, was zurückgegeben wird.

Versuche dies:

function _dbdb_wp_count_posts( $counts, $type, $perm ) {
    global $pagenow;

    if( 'edit.php' !== $pagenow ){
        return $counts;
    }

    if( current_user_can( 'manage_options' ) ){
        return $counts;
    }

    $_counts = new stdClass();
    foreach ( $counts as $status => $count ){
        $_counts->$status = '';
    }

    return $_counts;
}
add_filter('wp_count_posts', '_dbdb_wp_count_posts', 99, 3 );

Überprüfen Sie, ob wir uns auf der Seite edit.php im Administrator befinden. Wenn nicht, geben Sie einfach die Anzahl zurück.

Anschließend wird überprüft, ob der aktuelle Benutzer Site-Optionen verwalten kann, die nur ein Administrator ausführen kann. Wenn der aktuelle Benutzer dies kann, werden alle Zählungen zurückgegeben.

Wenn Sie diese Prüfung nicht bestehen, wird davon ausgegangen, dass Sie kein Administrator sind. Daher werden alle Zählungen auf 0 zurückgesetzt, wodurch die Statusverknüpfungen entfernt werden.

Hinweis: Die Statuslinks "all" und "mine" sind in der get_views()-Methode der WP_Posts_List_Table-Klasse fest codiert und können nicht gefiltert werden.

Ich habe dies schnell auf meinem Entwickler-Server getestet und mich zuerst als Administrator und dann als Autor angemeldet. Es hat wie erwartet funktioniert, aber stellen Sie sicher, dass Sie es gründlich testen.

1
darrinb