部分退款如何存储在 WooCommerce 数据库中?
Posted
技术标签:
【中文标题】部分退款如何存储在 WooCommerce 数据库中?【英文标题】:How are partial refunds stored in the WooCommerce Database? 【发布时间】:2016-10-09 07:53:52 【问题描述】:我有一个用 php 编写的简单后端管理工具,它从 WooCommerce 数据库中提取订单并将它们呈现给我们的厨房以处理交货。
我总是能够突出显示状态不是'wc-completed'
的表格行,以处理可能需要的任何额外处理。但是,我今天注意到,一个订单项的一个特定订单已被退款。 部分退款不会改变订单状态,所以我需要从数据库的另一个表中提取退款信息。
我查看了我所知道的与订单处理相关的所有表格 - wp_posts
、wp_postmeta
、wp_woocommerce_order_items
和 wp_woocommerce_order_itemmeta
,但没有任何退款信息的迹象。事实上,最后一个表中包含的 itemmeta 甚至没有调整数量,导致我的报告对于这样的部分订单不正确。
当您在 woocommerce 后端查看订单摘要时,它会显示此特定商品的数量 1
,然后在其下方显示 -1
。我假设基于此,数据库中的某处有与订单相关的退款记录,但我似乎无法找到它。甚至wp_postmeta
中的订单总额也不反映部分退款。
有谁知道这个退款数据存储在 wordpress 数据库中的什么位置?
谢谢。
【问题讨论】:
【参考方案1】:部分退款订单与普通订单一样存储在数据库中:
在带有'post_type' = 'shop_order_refund'
和'post_parent' = order_ID (number)
的wp_posts
表中,其中order_ID
是对原始'shop_order'
的引用。
要找出其中哪一项退款是部分退款,您需要在wp_post_meta
下找到此'refund_order'
的_refund_amount
金额值,以及他对应的'shop_order'
和_order_total
值:
如果('refund_order'
=> _refund_amount
)!=('shop_order'
=> _order_total
):
那么它是部分。
如果 ('refund_order'
=> _refund_amount
) == ('shop_order'
=> _order_total
):
那么它是正常 (不是部分)。
注意事项:
您可以为一份订单申请一项或多项部分退款。 对于退款订单,wp_postmeta
表中有一个_order_total
项目,其负值始终反映_refund_amount
项目的正值。此_order_total
值与相关父级 'shop_order' => '_order_total'
值无关。
在它是 相关父代
'shop_order' => '_order_total'
值的相反 (负) 值 仅当退款订单不是部分时。
wp_woocommerce_order_items
和wp_woocommerce_order_itemmeta
表中,有订单中的产品和退款订单的相关详细数据...
【讨论】:
完美!谢谢 - 这正是我需要的信息。非常感谢。 @BenMannino 你能分享一下这个查询吗,如果你有,那将退回所有退款的订单?部分和全部?以上是关于部分退款如何存储在 WooCommerce 数据库中?的主要内容,如果未能解决你的问题,请参考以下文章
woocommerce 预订状态更改 woocommerce 订单状态
如何修改 WooCommerce 购物车、结帐页面(主题部分)
如何使用 WooCommerce 检索 cart_item_data?