web-dev-qa-db-ja.com

下書きをedit.phpのall()ビューで除外する

Allビューは、wp-admin/edit.php内の下書きを含むすべての投稿を表示します。ドラフトステータスの投稿をallビューで除外するにはどうすればよいですか。

4
Megh Gandhi

register_post_status() 関数のshow_in_admin_all_listパラメーターは、特定の投稿ステータスが All postテーブルビューに含まれるかどうかを決定します。

おそらく最短のバージョンは次のとおりです。

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

}, 1 );

しかし、このようにグローバルを直接変更することを避け、デフォルトのdraftステータスを次のように上書きします。

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 );

デフォルトのドラフトステータスは優先度0で登録されているので、優先度1を使用します。

デフォルト設定の繰り返しを避け、将来可能な設定変更をサポートするために、代わりにget_post_status_object()を使うことができます。

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

以下のコードは、_ post投稿タイプの All リストの下の管理領域からドラフト投稿を削除します。

all_postsの値を持つクエリ引数1がメニューリンクに追加され、必要な場合にのみこの変更を適用するようにしています(管理ポストフィルタの下の All リンク( All、Mine、 Published、Sticky、Scheduled、Drafts ))はこのクエリパラメータを追加しますが、管理者メニューをクリックした場合はそうではないので、自分で追加する必要があります。

以下のコードをあなたのテーマのfunctions.phpまたはプラグイン内に配置してください。

// 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