从其元键获取 WooCommerce 订单项自定义字段值

Get WooCommerce order item custom fields values from their meta key

我正在尝试制作一个自定义订单页面,我可以在其中将所有订单详细信息显示到前端。

我创建了一个带有自定义字段的产品。现在我正在尝试显示订单的元数据,但我想 select 数组中的某些值。

这是我的代码:

$args = array('status'=> 'on-hold');
$orders = wc_get_orders($args);

foreach ( $orders as $order ) {
    $order_id = $order->get_id();
    $order_items = wc_get_order($order_id);
     //echo $order_items;

    foreach( $order_items->get_items() as  $item ){
        $item_data           = $item->get_data();
        $item_meta_data      = $item->get_meta_data();
        $formatted_meta_data = $item->get_formatted_meta_data( '_', true );

        //echo '<pre>' . print_r($item_meta_data, true) . '</pre>';
        echo '<pre>' . print_r($formatted_meta_data, true) . '</pre>';
    }
}

这是我得到的:

Array
(
    [45] => stdClass Object
        (
            [key] => Characters
            [value] => Character1 (.00)
Character2 (.00)
            [display_key] => Characters
            [display_value] => 

Character1 (.00)

Character2 (.00)


        )

    [46] => stdClass Object
        (
            [key] => More
            [value] =>  Card (.00)
 Bounties (.00)
            [display_key] => More
            [display_value] => 

 Card (.00)

 Bounties (.00)


        )

)


//etc

我想要做的是得到这样的东西:

Character1 (.00)
Character2 (.00)

Card (.00)
Bounties (.00)

您可以从您想要的 meya 键使用 WC_Date 方法 get_meta(),如下所示:

// Get orders
$orders = wc_get_orders( array( 'status'=> 'on-hold', 'limit' => -1 ) );

// Loop through the array of WC_Order Objects
foreach ( $orders as $order ) {
    // Get order Id
    $order_id = $order->get_id(); 
    
    // Loop through order items
    foreach( $order->get_items() as  $item ) {
        // Get "Characters" item custom field
        $characters = $item->get_meta('Characters');
        if ( $characters ) {
            echo '<p>Characters: ' . $characters . '</p>'; // Display
        }
        
        // Get "More" item custom field
        $more = $item->get_meta('More');
        if ( $more ) {
            echo '<p>More: ' . $more . '</p>'; // Display
        }
    }
}

它应该有效