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

标签 mysql wordpress woocommerce metadata orders

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

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

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

关于mysql - 部分退款如何存储在 WooCommerce 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37712789/

相关文章:

mysql - 如何比较 MySQL 中同一字段的两个不同值?

php - 从关系记录表中选择多个条目的动态查询

html - 删除小部件周围的虚线

php - 在商店地址部分的 Woocommerce 常规设置中添加自定义字段

java - 尝试执行 PreparedStatement 时出现 MySQLSyntaxErrorException

mysql - 归档理论

html - 尝试在 WordPress 站点中使用 CSS 在屏幕上一直拉伸(stretch)标题

javascript - WordPress REST API 与 Vue.js - 显示 ajax 响应,数组未更新

php - WooCommerce 订阅取消电子邮件给客户

wordpress - 隐藏 WooCommerce "My account"订单表中包含特定产品的订单