Получение ID товара из ID заказа в Woocommerce

25 апр. 2013 г., 10:57:33
Просмотры: 171K
Голосов: 47

У меня возникли проблемы с взаимосвязью деталей товара и заказа в Woocommerce. Я не могу найти ID товара, связанного с ID заказа на странице Просмотр заказов темы Woocommerce. Мне просто нужно получить содержимое товара и постоянную ссылку на странице Просмотр заказов.

Я пытался искать в wp_postmeta, но безуспешно.

0
Все ответы на вопрос 2
7
97

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'];
}
25 апр. 2013 г. 19:13:36
Комментарии

Если я ничего не упустил, это, кажется, не работает в последней версии WooCommerce...

rnevius rnevius
9 нояб. 2015 г. 19:34:43

Все еще работает в WooCommerce 2.4.8 у меня, но вам нужно убедиться, что переменная $order_id определена (иногда она находится в $order->id, в зависимости от контекста).

Ewout Ewout
10 нояб. 2015 г. 16:25:37

@mevius я добавил правку для версии 3+ с функцией dispatch для проверки нескольких товаров

That Realtor Programmer Guy That Realtor Programmer Guy
20 окт. 2017 г. 20:40:27

смотрите историю изменений для диспетчера, без него это нехорошо, так как он будет бессмысленно загружать ваш сервер

That Realtor Programmer Guy That Realtor Programmer Guy
22 нояб. 2017 г. 21:46:08

@GaretClaborn это полностью зависит от того, что вы делаете с этими данными. "как есть", этот пример фрагмента кода никак не расточителен по памяти.

Ewout Ewout
27 нояб. 2017 г. 15:44:58

Если вы проверяете несколько товаров, то вы повторяете довольно много логики вместо того, чтобы использовать преимущества первого прохода цикла

That Realtor Programmer Guy That Realtor Programmer Guy
19 дек. 2017 г. 06:02:19

Обратите внимание, что во многих шаблонах WooCommerce переменная $order уже определена

Chris Pink Chris Pink
20 сент. 2021 г. 13:24:10
Показать остальные 2 комментариев
2

Я работал над этим и достиг определенного результата, которым хотел бы поделиться с другими разработчиками. Это не самый предпочтительный способ сделать это, но для общего понимания публикую свой ответ.

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'; 
25 апр. 2013 г. 20:19:04
Комментарии

@ErenorPaz Спасибо, я добавил контент в ответе, в ответ на ваш комментарий :)

Arslaan Ejaz Arslaan Ejaz
25 окт. 2016 г. 11:33:52

Спасибо за быстрый ответ, даже в старой ветке! Я удалю свои предыдущие комментарии, так как они теперь устарели :)

Erenor Paz Erenor Paz
25 окт. 2016 г. 13:40:15