wp_postmeta 和 wp_woocommerce_order_itemmeta 表之间的差异

Difference between wp_postmeta and wp_woocommerce_order_itemmeta tables

似乎两个 table 都在 woocommerce 中存储订单的元数据。但是如何知道将哪些数据存储到哪里呢?

我目前正在使用 update_post_meta 功能,例如,

update_post_meta( $order_id, 'newcheckboxfield', esc_attr($_POST['newcheckboxfield']) 

在每个订单的结帐处添加一个自定义字段 (newcheckboxfield)。但我更喜欢元数据是否转到 wp_woocommerce_order_itemmeta table,因为它似乎存储了每个订单的相关数据,对吗?

table wp_woocommerce_order_itemmeta 仅适用于所有 WooCommerce 订单商品 元数据 (但不适用于订单元数据).

table wp_postmeta 处理所有 post 类型的元数据,例如默认 Wordpress 博客 post,默认 Wordpress page,默认 Wordpress 图片 attachment 和所有其他自定义 post 类型。

一些 WooCommerce 默认自定义 post 类型是 productproduct_variationshop_couponshop_ordershop_order_refund


为了更好地理解 WooCommerce 订单:

  • 大多数结帐字段都存储为订单元数据(在 wp_postmeta table 中)
  • 购物车项目数据存储为订单项目元数据(在 wp_woocommerce_order_itemmeta table 中)

结帐后的 WooCommerce 订单和订单项目自定义字段

1) 订单元数据

要添加自定义字段 tas 订单元数据,您将使用以下挂钩:

  • woocommerce_checkout_create_order 带有 2 个参数的操作挂钩:$order$data(请参阅 Stack OverFlow 上的 this examples
  • woocommerce_checkout_update_order_meta 带有 2 个参数的操作挂钩:$order_id$data(请参阅 Stack OverFlow 上的 this examples

2) 订单商品元数据

要将自定义字段添加为 订单项 元数据,您将使用以下钩子:

  • woocommerce_checkout_create_order_line_item 操作挂钩,如 Stack OverFlow 上解释的 (see other examples