it-swarm.com.de

Entwürfe in allen () Ansichten von edit.php ausschließen

Die Gesamtansicht zeigt alle Beiträge einschließlich Entwürfen in wp-admin/edit.php. Wie kann ich die Posts mit dem Entwurfsstatus in der Gesamtansicht ausschließen?

4
Megh Gandhi

Der Parameter show_in_admin_all_list in der Funktion register_post_status() bestimmt, ob ein bestimmter Beitragsstatus in der Ansicht All post table enthalten ist.

Die wahrscheinlich kürzeste Version ist:

add_action( 'init', function() use ( &$wp_post_statuses )
{
    $wp_post_statuses['draft']->show_in_admin_all_list = false;

}, 1 );

aber lassen Sie uns vermeiden, die Globals direkt so zu ändern, und überschreiben Sie den voreingestellten draft-Status mit:

add_action( 'init', function()
{
    register_post_status( 'draft',
        [
            'label'                     => _x( 'Draft', 'post status' ),
            'protected'                 => true,
            '_builtin'                  => true, 
            'label_count'               => _n_noop( 'Draft <span class="count">(%s)</span>', 'Drafts <span class="count">(%s)</span>' ),
            'show_in_admin_all_list'    => false, // <-- we override this setting
        ]
    );

}, 1 );

wobei wir die Priorität 1 verwenden, da der Standardentwurfsstatus bei der Priorität 0 registriert ist.

Um zu vermeiden, dass die Standardeinstellungen wiederholt werden, und um mögliche Änderungen der Einstellungen in Zukunft zu unterstützen, könnten wir stattdessen die Funktion get_post_status_object() verwenden:

add_action( 'init', function()
{   
    $a = get_object_vars( get_post_status_object( 'draft' ) );
    $a['show_in_admin_all_list'] = false; // <-- we override this setting
    register_post_status( 'draft', $a );

}, 1 );
7
birgire

Mit dem folgenden Code werden Entwurfspost aus dem Administrationsbereich unter der Auflistung All für den Posttyp post entfernt.

Das Abfrageargument all_posts mit dem Wert 1 wird zum Menülink hinzugefügt, um sicherzustellen, dass diese Änderung nur bei Bedarf angewendet wird. (Der Link Alle unter den Post-Filtern für Administratoren ( Alle, Meine, Published, Sticky, Scheduled, Drafts )) fügt diesen Abfrageparameter für uns hinzu. Dies ist jedoch nicht der Fall, wenn Sie auf das Admin-Menü klicken. Wir müssen ihn also selbst hinzufügen.

Fügen Sie den folgenden Code in den functions.php Ihres Themas oder in ein Plugin ein.

// Add a query argument to the Posts admin menu.
// This is used to ensure that we only apply our special filtering when needed.
add_action( 'admin_menu', 'wpse255311_admin_menu', PHP_INT_MAX );
function wpse255311_admin_menu() {
    global $menu, $submenu;

    $parent = 'edit.php';
    foreach( $submenu[ $parent ] as $key => $value ){
        if ( $value['2'] === 'edit.php' ) {
            $submenu[ $parent ][ $key ]['2'] = 'edit.php?all_posts=1';
            break;
        }
    }
}

// Hide draft posts from All listing in admin.
add_filter( 'pre_get_posts', 'wpse255311_pre_get_posts' );
function wpse255311_pre_get_posts( $wp_query ) {
    $screen = get_current_screen();

    // Ensure the the all_posts argument is set and == to 1
    if ( ! isset( $_GET['all_posts'] ) ||  $_GET['all_posts'] != 1 ) {
        return;
    }

    // Bail if we're not on the edit-post screen.
    if ( 'edit-post' !== $screen->id ) {
        return;
    }   

    // Bail if we're not in the admin area.
    if ( ! is_admin() ) {
        return;
    }

    // Ensure we're dealing with the main query and the 'post' post type
    // Only include certain post statuses.
    if ( $wp_query->is_main_query() && $wp_query->query['post_type'] === 'post' ) { 
        $wp_query->query_vars['post_status'] = array (
            'publish',
            'private',
            'future'
        );
    }  
}  
3
Dave Romsey