投稿タイプのWP_List_Tableオブジェクトを管理者edit.phpページに異なった表示方法で置き換える方法はありますか?
いいえ、リストテーブルを置き換えることはできません。フィルタはなく、すべてがハードコードされています。
ただし、投稿タイプ登録を変更し、組み込みページを防ぐためにshow_ui
をFALSE
に設定し、投稿タイプリストのカスタムページを次のように追加することができます。編集可能項目を表示します。
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
}
);
});
結果
この例は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 ;
}
結果: