Получить идентификатор продукта из идентификатора заказа в Woocommerce
2 ответ
- голосов
-
- 2013-04-25
WooCommerce 3.0+
вы можете получить элементы заказа по
$order = wc_get_order( $order_id ); $items = $order->get_items();
тогда,если вы пройдете по элементам,вы сможете получить все соответствующие данные:
foreach ( $items as $item ) { $product_name = $item->get_name(); $product_id = $item->get_product_id(); $product_variation_id = $item->get_variation_id(); }
Хороший совет - проверьте,как страницы заказов администратора получают данные,вы найдете там много ответов!
До 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']; }
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']; }
-
Если я чего-то не упускаю,похоже,это не работает в последней версии WooCommerce ...Unless I'm missing something, this doesn't appear to work in the latest version of WooCommerce...
- 0
- 2015-11-09
- rnevius
-
У меня все еще работает в WooCommerce 2.4.8,но вам нужно определить переменную $ order_id (иногда она находится в $ order->id,в зависимости от вашего контекста).Still works in WooCommerce 2.4.8 for me, but you need to have the $order_id variable defined (sometimes it's in $order->id, depending on your context).
- 0
- 2015-11-10
- Ewout
-
@mevius я добавил правку для 3+ с функцией отправки для проверки нескольких продуктов@mevius i added an edit for 3+ with a dispatch function for checking multiple products
- 0
- 2017-10-20
- Garet Claborn
-
см. историю изменений для диспетчера,без него это нехорошо,так как бессмысленно съедает ваш серверsee edit history for dispatcher, this is not good without it as it will eat up your server pointlessly
- 0
- 2017-11-22
- Garet Claborn
-
@GaretClaborn,который полностью зависит от того,что вы делаете с этими данными.«как есть»,этот фрагмент примера никоим образом не расходует память.@GaretClaborn that depends entirely on what you're doing with this data. 'as is', this example snippet is not wasteful of memory in any way.
- 0
- 2017-11-27
- Ewout
-
Если вы проверяете несколько продуктов,вы повторяете довольно много логики,а не можете извлечь выгоду из первого запуска цикла.If you are checking multiple products then you're repeating quite a bit of logic vs being able to capitalize on the first run of the loop
- 0
- 2017-12-19
- Garet Claborn
-
- 2013-04-25
Я работал над этим и кое-чего добился.Этим я хотел бы поделиться с другими разработчиками.Это не лучший способ сделать это,но для ознакомления я публикую свой ответ.
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>';
надеюсь кому-то поможет.
Дополнительно:
Лучше использовать префикс таблицы wordpress,чтобы избежать проблем на нескольких веб-сайтах или при миграции и т. д.
global $wpdb; $table_name = $wpdb->prefix . 'table_name';
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';
-
@ErenorPaz Спасибо,я добавил контент в ответ на ваш комментарий :)@ErenorPaz Thanks, I added content in answer, in reply to your comment :)
- 1
- 2016-10-25
- arslaan ejaz
-
Спасибо за быстрый ответ,даже в старой ветке!Удаляю свои предыдущие комментарии,так как сейчас они устарели :)Thank you for the fast response, even on an old thread! I'll delete my previous comments, since it's outdated now :)
- 0
- 2016-10-25
- Erenor Paz
У меня возникли проблемы с взаимосвязью сведений о продукте Woocommerce и сведений о заказе.Я не могу найти идентификатор продукта для идентификатора связанного заказа на странице Просмотр заказов темы Woocommerce.Я просто хочу получить содержание продукта,постоянную ссылку и т. Д. На странице Просмотр заказов .
Я попытался выполнить поиск в
wp_postmeta
,но безуспешно.