Lorsque le nombre de commande commence a augmenter, il peut parfois être utile d’avoir une vision plus globale sur les commandes WooCommerce. Voyons aujourd’hui comment ajouter une nouvelle colonne au listing des commandes sous WooCommerce, sur le back-office.

Ces manipulations seront à effectuer dans le fichier functions.php de votre thème : wp-content/votre-theme/functions.php. Pour éviter tout problèmes, pensez à faire une mise à jour de votre site avec Updraft Plus par exemple, et à travailler sur un thème enfant.

Introduction à l’ajout d’une colonne dans le listing commandes WooCommerce

Dans notre exemple, nous allons ajouter une colonne Produits, qui affichera un listing des produits et variations commandés.

Ajout d’une nouvelle colonne

Nous allons commencer par ajouter une nouvelle colonne, la nommer et le placer dans l’ordre souhaité :

function cw_add_order_profit_column_header($columns)
{
    $new_columns = array();
    foreach ($columns as $column_name => $column_info) {
        $new_columns[$column_name] = $column_info;
        if ('order_number' === $column_name) {
            $new_columns['product-display'] = __( 'Produits');
        }
    }
    return $new_columns;
}
add_filter('manage_edit-shop_order_columns', 'cw_add_order_profit_column_header');

Ici, nous bouclons sur toutes les colonnes, et lorsque la colonne order_number est identifié, nous ajoutons notre nouvelle colonne Produits.

Alimentation de la nouvelle colonne produits

Désormais, la colonne est bien ajoutée, nous allons l’alimenter, en bouclant sur les commandes, et pour chaque commande, nous allons récupérer les produits et variations de chacune de ces commandes :

add_action( 'manage_shop_order_posts_custom_column' , 'snv_custom_shop_order_column', 10, 2 );
function snv_custom_shop_order_column( $column ) {
 global $post, $woocommerce, $the_order;

    switch ( $column ) {

        case 'product-display' :
            $terms = $the_order->get_items();

          if ( is_array( $terms ) ) {
                foreach($terms as $term)
        {
        $detail_produit = '';
        $jsonData = json_decode($term, true);
    if(isset($term['item_meta']['pa_forme'])){
            $detail_produit .= $jsonData['meta_data'][0]['value'] . ' ';
        }
        if(isset($term['item_meta']['pa_longueur-diametre'])){
            $detail_produit .= 'Long : ' . $jsonData['meta_data'][1]['value'] . ' ';
            $detail_produit .= 'Larg : ' . $jsonData['meta_data'][2]['value'] . ' ';
        }
        if(isset($term['item_meta']['pa_couleur'])){
            $detail_produit .= 'Couleur : ' . $jsonData['meta_data'][3]['value'] . ' ';
        }
        if(isset($term['item_meta']['_reduced_stock'])){
            $detail_produit .= 'x' . $jsonData['meta_data'][4]['value'] . ' ';
        }
        	echo '<b>' . $term['name'] . '</b> (' . $detail_produit . ') <br> ';
        }
              } else {
                _e( 'Unable get the products', 'woocommerce' );
        }
            break;

    }
}

Ici, libre à vous d’adapter le code en fonction du besoin.