web-dev-qa-db-fra.com

Comment puis-je ajouter une colonne dans la wp_list_table de la zone d'administration?

enter image description here

Donc, ma question est à peu près ce que vous voyez sur la photo. Dans mon type de message personnalisé "Produits", comment puis-je ajouter une colonne supplémentaire comme SEO que Yoast a faite à ma table principale, appelée WP_List_Table . J'ai le code qui explique comment obtenir une fonctionnalité de rupture de stock à afficher selon que l'élément a un champ custom_field de "Rupture de stock" défini sur true ou sur false. Ce n'est pas un problème, mais comment puis-je cibler cette zone de la table dans mon code. Je suppose que ce serait un filtre, pas pour savoir comment cela fonctionnerait, mais je l'apprécie vraiment si quelqu'un peut m'aider.

1
Lucas Santos

Je pense que ce dont vous avez besoin, c’est l’ensemble de filtres et d’actions permettant d’ajouter des colonnes personnalisées pour poster des écrans de modification:

  • manage_edit-post_type_columns : utilisé pour ajouter des colonnes
  • manage_posts_custom_column : utilisé pour imprimer le contenu de chaque ligne de la colonne
  • manage_edit-post_type_sortable_columns: utilisé pour enregistrer les colonnes pouvant être triées. Sans papiers.
  • request : vous devrez peut-être utiliser ce filtre en combinaison avec manage_edit-post_type_sortable_columns.

Par exemple, j'utilise ce code pour ajouter une colonne pouvant être triée avec des informations sur les hits après un méta-champ personnalisé:

add_filter( 'manage_edit-post_columns',  'add_new_columns' );
add_filter( 'manage_edit-post_sortable_columns', 'register_sortable_columns' );
add_filter( 'request', 'hits_column_orderby' );
add_action( 'manage_posts_custom_column' , 'custom_columns' );
/**
* Add new columns to the post table
*
* @param Array $columns - Current columns on the list post
*/
function add_new_columns($columns){

    $column_meta = array( 'hits' => 'Hits' );
    $columns = array_slice( $columns, 0, 6, true ) + $column_meta + array_slice( $columns, 6, NULL, true );
    return $columns;

}

// Register the columns as sortable
function register_sortable_columns( $columns ) {
    $columns['hits'] = 'hits';
    return $columns;
}

//Add filter to the request to make the hits sorting process numeric, not string
function hits_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'hits' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => 'hits',
            'orderby' => 'meta_value_num'
        ) );
    }

    return $vars;
}

/**
* Display data in new columns
*
* @param  $column Current column
*
* @return Data for the column
*/
function custom_columns($column) {

    global $post;

    switch ( $column ) {
        case 'hits':
            $hits = get_post_meta( $post->ID, 'hits', true );
            echo (int)$hits;
        break;
    }
}
1
cybmeta