web-dev-qa-db-fra.com

Remplacement de la table List d'un type d'article

Existe-t-il un moyen de remplacer l'objet WP_List_Table d'un type de publication pour afficher ledit type de publication différemment sur la page Admin edit.php?

2
Manny Fleurmond

Non, vous ne pouvez pas remplacer la table de liste. Il n'y a pas de filtre, tout est codé en dur.

Mais vous pouvez modifier le type de publication registration , définissez show_ui sur FALSE pour empêcher la page intégrée et ajoutez une page personnalisée pour la liste de types de publication afin d'afficher les éléments modifiables.

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

Résultat

screen shot

5
fuxia

Cet exemple est appliqué au type de poste post. Ceci exploite les filtres WP_Posts_List_Table et views-edit-{$post_type}. Cela ne semble pas être la meilleure solution, mais cela fonctionne:

Assurez-vous que la classe est chargée sur votre page:

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

Etend la classe WP_Posts_List_Table pour supprimer la table de liste et définir le contenu personnalisé:

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";
    }
}

Utilisez-le dans un crochet de filtre:

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

Résultat:

 enter image description here 

3
KeepMove