在 WooCommerce 中添加唯一的订单项元数据作为订单元数据

Add unique line item meta as order meta data in WooCommerce

我有存储在订单项下的元数据,很多时候数据是相同的。我正在尝试将唯一的元值保存为订单元数据,用逗号分隔,如果可能的话,我会在此数据之前添加文本“这些是你的号码”。

到目前为止,我尝试了下面的代码,但没有任何反应。

add_action( 'woocommerce_update_order', 'add_unique_order_nummers_to_order', 10, 2 );
function add_unique_order_nummers_to_order( $order_id, $order ) {
  
  $allenummers = array();
  $items = $order->get_items();
  
  foreach ( $order->get_items() as $item_id => $item ) {
    $allenummers[] = $item->get_meta( '_org_ordernummer', true );
  }
  $ordernummers_array = array_unique($allenummers);
  $ordernummers_unique = implode(',', $ordernummers_array);
        update_post_meta( $order_id, '_Unieke_nummers', $ordernummers_unique );
}

希望有人能帮忙

更新: 当订单状态更改为“we-fact”自定义订单状态时,根据您的评论,使用以下带有不同钩子的简化代码:

add_action('woocommerce_order_status_we-fact', 'add_unique_order_nummers_to_order', 20, 2 );
function add_unique_order_nummers_to_order( $order_id, $order ) {
    $allenummers = array(); // Initializing
    
    // Loop through order 
    foreach ( $order->get_items() as $item ) {
        $allenummers[] = $item->get_meta( '_org_ordernummer' );
    }

    if ( ! empty($allenummers) ) {
        $order->update_meta_data('_Unieke_nummers', sprintf( __("These are your numbers: %s"), implode(', ', array_unique($allenummers) ) ) );
    }
}

代码进入活动子主题(或活动主题)的 functions.php 文件。它应该有效。