Отримати ідентифікатор продукту з ідентифікатора замовлення у Woocommerce [закрито]


38

У мене проблеми з деталями продукту Woocommerce та співвідношенням деталей замовлення. Я не в змозі знайти ідентифікатор продукту відповідного ідентифікатора замовлення на сторінці " Переглянути замовлення " теми Woocommerce. Я просто хочу отримати вміст продукту та постійну посилання тощо на сторінці " Переглянути замовлення ".

Я намагався шукати, wp_postmetaале не пощастило.

Відповіді:


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'];
}

Якщо я чогось не пропускаю, це, здається, не працює в останній версії 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'; 

1
@ErenorPaz Дякую, я додав вміст у відповідь, відповідаючи на ваш коментар :)
arslaan ejaz

Дякую за швидку відповідь, навіть на старій темі! Я
видаляю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.