Получить идентификатор продукта из идентификатора заказа в Woocommerce [закрыто]

38

У меня проблемы с информацией о продукте Woocommerce и деталями заказа. Я не могу найти идентификатор продукта для соответствующего идентификатора заказа на странице Просмотр заказов в теме Woocommerce. Я просто хочу получить информацию о продукте, постоянную ссылку и т. Д. На странице « Просмотр заказов» .

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

Arslaan Ejaz
источник

Ответы:

68

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();
}

Хороший совет - проверить, как страницы заказа администратора получают данные, там вы найдете много ответов!

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'];
}
Ewout
источник
Если я что-то упустил, это не работает в последней версии WooCommerce ...
rnevius
По-прежнему работает в WooCommerce 2.4.8 для меня, но вам нужно определить переменную $ order_id (иногда она находится в $ order-> id, в зависимости от вашего контекста).
Ewout
@ Mevius Я добавил редактирование для 3+ с функцией отправки для проверки нескольких продуктов
Гарет Клаборн
смотрите историю изменений для диспетчера, без нее это не хорошо, так как это бессмысленно
пожирает
@GaretClaborn, это полностью зависит от того, что вы делаете с этими данными. «как есть», этот пример фрагмента не тратит память в любом случае.
Ewout
6

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

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'; 
Arslaan Ejaz
источник
1
@ErenorPaz Спасибо, я добавил контент в ответ, в ответ на твой комментарий :)
arslaan ejaz
Спасибо за быстрый ответ даже на старую ветку! Я удалю свои предыдущие комментарии, так как они устарели сейчас :)
Эренор Пас