我有一个用 PHP 编写的简单后端管理工具,它可以从 WooCommerce 数据库中提取订单并将其呈现给我们的厨房以处理配送。
我总是能够突出显示状态不是 'wc-completed'
的表格行,以处理可能需要的任何额外处理。但是,今天引起我注意的是,一个特定订单已针对一个订单项进行了退款。 部分退款不会更改订单状态,因此我需要从数据库中的另一个表中提取退款信息。
我检查了我所知道的与订单处理相关的所有表格 - wp_posts
、wp_postmeta
、wp_woocommerce_order_items
和 wp_woocommerce_order_itemmeta
,但没有任何退款信息的迹象。事实上,最后一个表中包含的 itemmeta 甚至没有调整数量,使我的报告对于像这样的部分订单不正确。
当您在 woocommerce 后端查看订单摘要时,它会显示该特定商品的数量 1
,然后是它正下方的 -1
。基于此,我假设数据库中某处有与订单关联的退款记录,但我似乎无法找到它。即使 wp_postmeta
中的订单总额也没有反射(reflect)部分退款。
有谁知道这个退款数据存储在 wordpress 数据库中的什么地方?
谢谢。
最佳答案
部分退款订单像普通订单一样存储在数据库中:
在具有 'post_type' = 'shop_order_refund'
和 'post_parent' = order_ID (number)
的 wp_posts
表中,其中 order_ID
是对原始 'shop_order'
的引用。
要找出其中哪一项退款是部分退款,您需要 _refund_amount
金额值,您可以在 wp_post_meta
下找到此 'refund_order'
和他对应的 'shop_order'
也有 _order_total
值:
如果('refund_order'
=> _refund_amount
)!=('shop_order'
=> _order_total
) :
然后是部分。
if ( 'refund_order'
=> _refund_amount
) == ( 'shop_order'
=> _order_total
) :
那么它就是正常的 (不是部分的)。
注意事项:
- 您可以为一个订单申请一项或多项部分退款。
- 对于退款订单,
wp_postmeta
表中有一个_order_total
项目,其负值始终反射(reflect)的正值_refund_amount
项目。此_order_total
值与 related parent'shop_order' => '_order_total'
值无关。It's the opposite (negative) value of the related parent
'shop_order' => '_order_total'
value only when refund order IS NOT PARTIAL. - 在
wp_woocommerce_order_items
和wp_woocommerce_order_itemmeta
表中,有订单商品和退款订单的相关详细数据...
关于mysql - 部分退款如何存储在 WooCommerce 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37712789/