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

hmmo2u0o  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(140)

我们已经为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] => [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吗?任何帮助都非常感谢。谢谢。

0lvr5msh

0lvr5msh1#

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

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

字符串
然后在每个WC_Meta_Data对象上,你可以像get_data()一样使用WC_Meta_Data available methods,它给出一个不受保护的数据数组:

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数据,如下所示:

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


注意此嵌套Meta数据自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_ZoneWC_Legacy_WebhookWC_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

相关问题