【问题标题】:How do I get order nested meta data in WooCommerce 3如何在 WooCommerce 3 中获取订单嵌套元数据
【发布时间】:2023-04-02 04:00:01
【问题描述】:

我们为 WooCommerce 安装了另一个名为 Booster Plus for WooCommerce 的插件,该插件可以通过 invoice number 支付订单来修改 checkout page

我也通过显示invoice number 来自定义我们的thank you page。目前,我无法做到这一点,因为我不知道如何正确获取嵌套 $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] => testjohndoe123@gmail.com
      [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】:

    您可以使用WC_data method get_meta_data() 获取和取消保护此嵌套元数据,它提供WC_Meta_Data 对象数组:

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

    然后在每个WC_Meta_Data 对象上,您可以使用WC_Meta_Data available methods,如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 method get_meta() 从特定元键直接从订单中获取任何嵌套元数据,如下所示:

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

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


    关于抽象WC_Data

    它由使用相同 CRUD(s) 模式的类实现。

    直接已知子类:
    WC_Abstract_Legacy_OrderWC_Abstract_Legacy_ProductWC_Customer_DownloadWC_Customer_Download_LogWC_Legacy_CouponWC_Legacy_CustomerWC_Legacy_Payment_TokenWC_Legacy_Shipping_Zone、@ 987654346@,WC_Order_Item

    间接已知子类:
    WC_Abstract_OrderWC_CouponWC_Payment_TokenWC_Payment_Token_CCWC_Payment_Token_ECheckWC_ProductWC_Product_ExternalWC_Product_GroupedWC_Product_SimpleWC_Product_VariableWC_Product_VariationWC_Shipping_ZoneWC_CustomerWC_WebhookWC_OrderWC_Order_Item_CouponWC_Order_Item_FeeWC_Order_Item_ProductWC_Order_Item_ShippingWC_Order_Item_TaxWC_Order_Refund

    见:Developing using WooCommerce CRUD objects

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2018-12-07
      • 2018-10-26
      相关资源
      最近更新 更多