The question:
I am having trouble with Woocommerce product details and order details relationship. I’m not able to find the product ID of a related order ID on the View Orders page of the Woocommerce theme. I simply want to get the product content and permalink etc on View Orders page.
I tried searching in wp_postmeta
but had no luck.
The Solutions:
Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.
Method 1
WooCommerce 3.0+
you can get the order items of an order by
$order = wc_get_order( $order_id );
$items = $order->get_items();
then if you loop through the items, you can get all the relevant data:
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
$product_variation_id = $item->get_variation_id();
}
a good tip is to check how the admin order pages get the data, you’ll find many answers there!
Pre-WooCommerce 3.0
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item['name'];
$product_id = $item['product_id'];
$product_variation_id = $item['variation_id'];
}
Method 2
I worked on it and achieved something. That I would like to share to other developers. This is not preferred way to do it, but for knowledge I am posting my answer.
global $wpdb;
$result = $wpdb->get_results('select t1.order_item_id, t2.* FROM
wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id
where t1.order_id='.$order->ID);
echo '<pre>';
print_r($result);
echo '</pre>';
hope will help someone.
Additionally:
Better to use wordpress table prefix to avoid problems in multiple website or in migration etc.
global $wpdb;
$table_name = $wpdb->prefix . 'table_name';
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0