Welchen Hook benutze ich, um die Post Status Option im Admin zu bearbeiten?

Ich möchte ausstehende Posts nur auf bestimmte Benutzer im Admin-Bereich beschränken, daher möchte ich sie aus den Post-Status-Optionen entfernen, wenn ich alle Posts anschaue (das Bit, das im Bild unten rot markiert ist):

WordPress-Poststatus-Untermenü

Ich kann jedoch nicht herausfinden, welchen Haken ich bearbeiten muss. Kann mich jemand in die richtige Richtung schicken? Ich habe die Filterreferenz gescannt, aber nichts passendes gesehen.

Solutions Collecting From Web of "Welchen Hook benutze ich, um die Post Status Option im Admin zu bearbeiten?"

Sie können den Filter views_edit-post (oder views_edit-{custom-post-type} ) verwenden, um die verfügbaren “Ansichten” zu ändern:

 add_filter('views_edit-post', 'cyb_remove_pending_filter' ); function cyb_remove_pending_filter( $views ) { if( isset( $views['pending'] ) ) { unset( $views['pending'] ); } return $views; } 

Im obigen Filter müssen Sie die Benutzerregeln angeben, die Sie anwenden möchten. Wenn Sie beispielsweise die Ansicht “Ausstehend” nur für Benutzer entfernen möchten, die andere Beiträge nicht bearbeiten können, gehen Sie wie folgt vor:

 add_filter('views_edit-post', 'cyb_remove_pending_filter' ); function cyb_remove_pending_filter( $views ) { if( isset( $views['pending'] ) && ! current_user_can('edit_others_posts') ) { unset( $views['pending'] ); } return $views; } 

Wenn Sie die ausstehende Ansicht ausschließen, müssen Sie außerdem die Postanzahl “Alle” aktualisieren:

 add_filter('views_edit-post', 'cyb_remove_pending_filter' ); function cyb_remove_pending_filter( $views ) { if( isset( $views['pending'] ) && ! current_user_can('edit_others_posts') ) { unset( $views['pending'] ); $args = [ // Post params here // Include only the desired post statues for "All" 'post_status' => [ 'publish', 'draft', 'future', 'trash' ], 'all_posts' => 1, ]; $result = new WP_Query($args); if($result->found_posts > 0) { $views['all'] = sprintf( ''.__('All').' (%d)', admin_url('edit.php?all_posts=1&post_type='.get_query_var('post_type')), $result->found_posts ); } } return $views; } 

Dieser Code entfernt nur den Filter auf dem Bildschirm, blockiert jedoch nicht den Zugriff auf den Post mit dem Status “Ausstehend”. Um den Zugriff zu blockieren, müssen pre_get_posts Aktion pre_get_posts . Beispielsweise:

 add_action( 'pre_get_posts', 'cyb_exclude_pending_posts' ); function cyb_exclude_pending_posts( $query ) { // only in admin, main query and if user can not edit others posts if( is_admin() && ! current_user_can('edit_others_posts') && $query->is_main_query() ) { // Include only the desired post statues $post_status_arg = [ 'publish', 'draft', 'future', 'trash' ]; $query->set( 'post_status', $post_status_arg ); } } 

Der views_{$this->screen->id} Filter ist views_{$this->screen->id} der sich in der Methode WP_List_Table::views() .

Wobei $this->screen->id der Kontext ist, in dem Sie sich befinden, zB posts , users , etc …

Datei wp-admin/class-wp-list-table.php

Beispielverwendung:

 function filter_posts_listable_views($views) { //do your thing... return $views; } add_filter( 'views_posts', 'filter_posts_list_table_views', 100);