如何在 WooCommerce 3 中获取订单嵌套元数据

问题描述 投票:0回答:1

我们为 WooCommerce 安装了另一个名为

Booster Plus for WooCommerce
的插件,该插件可以通过
checkout page
支付订单来修改
invoice number

我也通过显示

thank you page
来自定义我们的
invoice number
。目前,我无法做到这一点,因为我不知道如何正确获取嵌套
$order->get_data()
结果的值。

<?php 
  $order_data = $order->get_data();
  print_r($order_data);
?>

上面

order_data
的结果如下所示:

(
    [id] => 7403
    [discount_total] => 0
    [discount_tax] => 0
    [shipping_total] => 0.00
    [shipping_tax] => 0
    [cart_tax] => 2.47
    [total] => 21.47
    [total_tax] => 2.47
    [customer_id] => 20
    [order_key] => wc_order_8pt3q7T79
    [billing] => Array
    (
      [first_name] => John
      [last_name] => Done
      [company] => g2x
      [address_1] => 3134 James Street
      [address_2] => 
      [city] => Moose Factory
      [state] => ON
      [postcode] => P0L 1W0
      [country] => CA
      [email] => [email protected]
      [phone] => 705-658-2112
    )
    [cart_hash] => 087347d19dff4677dc8kaeb2b2c653c6
    [number] => 7403
    [meta_data] => Array
    (
      [0] => WC_Meta_Data Object
        (
          [current_data:protected] => Array
              (
                  [id] => 102652
                  [key] => mailchimp_woocommerce_campaign_id
                  [value] => 
              )

          [data:protected] => Array
              (
                  [id] => 102652
                  [key] => mailchimp_woocommerce_campaign_id
                  [value] => 
              )
        )

      [1] => WC_Meta_Data Object

      [2] => WC_Meta_Data Object

      [3] => WC_Meta_Data Object

      [4] => WC_Meta_Data Object

      [5] => WC_Meta_Data Object
      (
        [current_data:protected] => Array
        (
          [id] => 102694
          [key] => _wcj_custom_payment_gateway_input_fields
          [value] => Array
          (
            [pay_by_po] => 123456789
          )
        )

        [data:protected] => Array
        (
          [id] => 102694
          [key] => _wcj_custom_payment_gateway_input_fields
          [value] => Array
            (
              [pay_by_po] => 123456789
            )
        )
      )
    [coupon_lines] => Array
    ()

)

你知道我怎样才能得到

[pay_by_po]
的值吗?即
123456789
?任何帮助是极大的赞赏。谢谢你。

php wordpress woocommerce metadata orders
1个回答
3
投票

您可以使用

WC_data
方法
get_meta_data()
获取并取消保护此嵌套元数据,该方法给出一组
WC_Meta_Data
对象:

$meta_data = $order->get_meta_data();
print_r($order_data);

然后在每个

WC_Meta_Data
对象上,您可以使用
WC_Meta_Data
可用方法
,如
get_data()
提供不受保护的数据数组:

foreach( $order->get_meta_data() as $meta_data_obj ) {
    $meta_data_array = $meta_data_obj->get_data();
    print_r($meta_data_array);

    $meta_key   = $meta_data_array['key']; // The meta key
    $meta_value = $meta_data_array['value']; // The meta value
}

您还可以使用

WC_Data
方法
get_meta()
从特定元键直接获取订单中的任何嵌套元数据,如下所示:

$meta_value = $order->get_meta('_wcj_custom_payment_gateway_input_fields');
print_r($meta_value);

注意此嵌套元数据自 WooCommerce 版本 3 起就存在。


关于摘要
WC_Data

它是由使用相同 CRUD 模式的类实现的。

直接已知子类:

WC_Abstract_Legacy_Order
WC_Abstract_Legacy_Product
WC_Customer_Download
WC_Customer_Download_Log
WC_Legacy_Coupon
WC_Legacy_Customer
WC_Legacy_Payment_Token
WC_Legacy_Shipping_Zone
WC_Legacy_Webhook
WC_Order_Item

间接已知子类:

WC_Abstract_Order
WC_Coupon
WC_Payment_Token
WC_Payment_Token_CC
WC_Payment_Token_ECheck
WC_Product
WC_Product_External
WC_Product_Grouped
WC_Product_Simple
WC_Product_Variable
WC_Product_Variation
WC_Shipping_Zone
WC_Customer 
,
WC_Webhook
,
WC_Order
,
WC_Order_Item_Coupon
,
WC_Order_Item_Fee
,
WC_Order_Item_Product
,
WC_Order_Item_Shipping
,
WC_Order_Item_Tax
,
WC_Order_Refund

请参阅:使用 WooCommerce CRUD 对象进行开发

© www.soinside.com 2019 - 2024. All rights reserved.