web-dev-qa-db-ja.com

投稿タイプのリストテーブルを置き換える

投稿タイプのWP_List_Tableオブジェクトを管理者edit.phpページに異なった表示方法で置き換える方法はありますか?

2
Manny Fleurmond

いいえ、リストテーブルを置き換えることはできません。フィルタはなく、すべてがハードコードされています。

ただし、投稿タイプ登録を変更し、組み込みページを防ぐためにshow_uiFALSEに設定し、投稿タイプリストのカスタムページを次のように追加することができます。編集可能項目を表示します。

add_action( 'wp_loaded', function(){
    register_post_type(
        'test',
        array(
            'labels' => array(
                'name' => 'TEST'
            ),
            'public' => TRUE,
            'show_ui' => FALSE
        )
    );
});

add_action( 'admin_menu', function(){
    add_object_page(
        'TEST',
        'TEST',
        'edit_test',
        'test',
        function(){
            echo 'test'; // list post type items here
        }
    );
});

結果

screen shot

5
fuxia

この例はpost投稿タイプに適用されます。これはWP_Posts_List_Tableクラスとviews-edit-{$post_type}フィルタを利用しています。これは最善の方法ではないようですが、うまくいきます。

クラスがあなたのページにロードされていることを確認してください。

if(!class_exists('WP_List_Table')){
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}
if(!class_exists('WP_Posts_List_Table')){
    require_once( ABSPATH . 'wp-admin/includes/class-wp-posts-list-table.php' );
}

リストテーブルを削除してカスタムコンテンツを定義するためにWP_Posts_List_Tableクラスを拡張します。

class wpse_CustomTable extends WP_Posts_List_Table
{       
    // remove search box
    public function search_box( $text, $input_id ){ }

    // Your custom list table is here
    public function display() {
        echo "Test";
    }
}

フィルタフックの内側で使用します。

// hook into `views-edit`
add_filter( 'views_edit-post',  "sstssfb_custom_list_table");    
// Override the post table object
function sstssfb_custom_list_table() {
    global $wp_list_table;
    $mylisttable = new wpse_CustomTable();
    $wp_list_table = $mylisttable ;    
}

結果:

enter image description here

3
KeepMove