How to display the meta key and values of the order item in the admin order list column order status?

324 Views Asked by At

I´m using Woocommerce with paid addon from automatic "product addon" which adds some meta values to the order item table

I want to show 2 or more specific meta key values in the admin order list.

  • 1 Funghi Topup: Salami Oil: chilli

I got the quantity and product name working with this code but not the order item meta, any ideas?

add_action('manage_shop_order_posts_custom_column', 'orders_list_preview_items', 20, 2 );
function orders_list_preview_items($column, $post_id) {
    
    global $the_order, $post;
    
    if ('order_status' === $column) {
        
        // Start list
        echo '<ul class="orders-list-items-preview">';
        
        // Loop through order items
        foreach($the_order->get_items() as $item) {
            
            $product = $item->get_product();
         
            
            $name    = $item->get_name();
            $qty     = $item->get_quantity();
        $meta    = $item->get_meta();
            
            echo "<li>
                
               <label>$qty</label> $name $meta
            </li>";
        }
        
        // End list
        echo '</ul>';
    }
    
    
}
2

There are 2 best solutions below

5
On BEST ANSWER

You can Loop through the item's metadata. and check for only the meta keys that you want to display. check the below code.

add_action('manage_shop_order_posts_custom_column', 'orders_list_preview_items', 20, 2);
function orders_list_preview_items($column, $post_id){
    global $the_order, $post;

    if ('order_status' === $column) {
        // Start list
        echo '<ul class="orders-list-items-preview">';

        // Loop through order items
        foreach ($the_order->get_items() as $item) {
            $product = $item->get_product();

            $name = $item->get_name();
            $qty = $item->get_quantity();
            $meta = $item->get_meta();

            echo "<li>
                <label>$qty</label> $name";

            // Loop through the item's meta data
            foreach ($meta as $meta_key => $meta_value) {
                // Display specific meta key values
                if (in_array($meta_key, ['Funghi Topup', 'Salami Oil', 'chilli'])) {
                    echo "<br>$meta_key: $meta_value";
                }
            }

            echo "</li>";
        }

        // End list
        echo '</ul>';
    }
}
1
On
'add_action('manage_shop_order_posts_custom_column', orders_list_preview_items', 20, 2);

function orders_list_preview_items($column, $post_id) { global $the_order, $post;

if ('order_status' === $column) {
    // Start list
    echo '<ul class="orders-list-items-preview">';

    // Loop through order items
    foreach ($the_order->get_items() as $item) {
        $product = $item->get_product();
        $name = $item->get_name();
        $qty = $item->get_quantity();
        $meta = $item->get_meta_data(); // Use get_meta_data() to retrieve item meta data

        echo "<li><label>$qty</label> $name ";

        // Display Topup and Oil meta values
        foreach ($meta as $meta_item) {
            if ($meta_item->key === 'Topup') {
                echo "<span style='color: green; line-height: 1.5;'>{$meta_item->value}</span> ";
            }
            if ($meta_item->key === 'Oil') {
                echo "<span style='color: brown; line-height: 1.5;'>{$meta_item->value}</span>";
            }
        }

        echo "</li>";
    }

    // End list
    echo '</ul>';
}

} code works ;-)