部分退款如何存储在 WooCommerce 数据库中?

Posted

技术标签:

【中文标题】部分退款如何存储在 WooCommerce 数据库中?【英文标题】:How are partial refunds stored in the WooCommerce Database? 【发布时间】:2016-10-09 07:53:52 【问题描述】:

我有一个用 php 编写的简单后端管理工具,它从 WooCommerce 数据库中提取订单并将它们呈现给我们的厨房以处理交货。

我总是能够突出显示状态不是'wc-completed' 的表格行,以处理可能需要的任何额外处理。但是,我今天注意到,一个订单项的一个特定订单已被退款。 部分退款不会改变订单状态,所以我需要从数据库的另一个表中提取退款信息。

我查看了我所知道的与订单处理相关的所有表格 - wp_postswp_postmetawp_woocommerce_order_itemswp_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_itemswp_woocommerce_order_itemmeta表中,有订单中的产品和退款订单的相关详细数据...

【讨论】:

完美!谢谢 - 这正是我需要的信息。非常感谢。 @BenMannino 你能分享一下这个查询吗,如果你有,那将退回所有退款的订单?部分和全部?

以上是关于部分退款如何存储在 WooCommerce 数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 优惠券如何存储在数据库中?

woocommerce 预订状态更改 woocommerce 订单状态

如何修改 WooCommerce 购物车、结帐页面(主题部分)

如何使用 WooCommerce 检索 cart_item_data?

最近打算用WordPress WooCommerce搭建一个商城,可以用微信支付吗

RocketMQ - 如何实现顺序消息