Как частичные возвраты хранятся в базе данных WooCommerce?

У меня есть простой инструмент управления серверной частью, написанный на PHP, который извлекает заказы из базы данных WooCommerce и представляет их нашей кухне для обработки поставок.

Я всегда мог выделить строку таблицы со статусом, отличным от 'wc-completed', чтобы выполнить любую дополнительную обработку, которая может потребоваться. Однако сегодня мне было доведено до сведения, что один конкретный заказ был возмещен за одну позицию. Частичный возврат не меняет статус заказа, поэтому мне нужно получить информацию о возврате из другой таблицы в базе данных.

Я проверил все известные мне таблицы, связанные с обработкой заказов — wp_posts, wp_postmeta, wp_woocommerce_order_items и wp_woocommerce_order_itemmeta, но не нашел никакой информации о возмещении. На самом деле метаданные, содержащиеся в последней таблице, даже не корректируют количество, что делает мои отчеты неверными для таких частичных заказов.

Когда вы просматриваете сводку заказа в бэкэнде woocommerce, он показывает количество 1 для этого конкретного товара, а затем -1 прямо под ним. Исходя из этого, я предполагаю, что где-то в базе данных есть записи о возврате, связанные с заказами, но я не могу их найти. Даже сумма заказа в wp_postmeta не отражает частичный возврат средств.

Кто-нибудь знает, где эти данные о возврате хранятся в базе данных WordPress?

Спасибо.


person Ben Mannino    schedule 08.06.2016    source источник


Ответы (1)


Заказы на частичный возврат хранятся в базе данных так же, как и обычные: в таблице wp_posts с 'post_type' = 'shop_order_refund' и 'post_parent' = order_ID (number), где order_ID – это ссылка на исходный 'shop_order'.

Чтобы узнать, какой из этих возвратов является частичным, вам нужно значение суммы _refund_amount, которое вы можете найти в разделе wp_post_meta для этого 'refund_order', а также соответствующее ему 'shop_order' со значением _order_total:

if ( 'refund_order' => _refund_amount ) != ( 'shop_order' => _order_total ) : тогда это частично.

if ( 'refund_order' => _refund_amount ) == ( 'shop_order' => _order_total ) : тогда это нормально (не частично).

Примечания:

  • Вы можете иметь один или несколько частичных возвратов для одного заказа.
  • Для заказов на возврат существует элемент _order_total в таблице wp_postmeta с отрицательным значением, которое всегда отражает положительное значение элемента _refund_amount. Это значение _order_total не имеет ничего общего с связанным родительским значением 'shop_order' => '_order_total'.
    #P6#
  • В таблицах wp_woocommerce_order_items и wp_woocommerce_order_itemmeta есть связанные подробные данные о продуктах в заказах и заказах с возвратом...
person LoicTheAztec    schedule 08.06.2016
comment
Идеальный! Спасибо - это была как раз та информация, которая мне была нужна. Очень признателен. - person Ben Mannino; 09.06.2016
comment
@BenMannino, не могли бы вы поделиться запросом, если он у вас есть, который вернет все возвращенные заказы? Частичная и полная? - person pakalbekim; 01.02.2021