Сохраните данные заказа WooCommerce в поле ACF

#wordpress #woocommerce #advanced-custom-fields

Вопрос:

Моя цель-сохранить данные заказа WooCommerce в поле ACF в бэкэнде WordPress. Для этого проекта каждый выполненный заказ создает новую запись в моем пользовательском типе записи с именем «groeiprocessen». Код для этой функции выглядит так и работает идеально.

     function create_post_after_order( $order_id ) {
  if (  $order_id instanceof WC_Order ){
    return;
  }
    
  $order = wc_get_order( $order_id );
  $order_items = $order->get_items(); 
    
    foreach ( $order_items as $item_id => $item_data ) {
    $product = $item_data->get_product();
    $content.= $item_data->get_quantity();
    $content.= $product->get_name();
  }
    
    $new_post = array(
    'post_title'   => "Order {$order_id}",
    'post_content' => $content,
    'post_status' => 'private',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'groeiproces',
    'post_status'   => 'publish',
  );    
  $post_id = wp_insert_post($new_post);
}
add_action( 'woocommerce_thankyou', 'create_post_after_order', 10, 1 );
 

Прямо сейчас название и количество продукта сохраняются в содержимом поста, которое выглядит следующим образом.

Groeiproces_пост

введите описание изображения здесь

Как вы можете видеть, я создал поля ACF в поле содержимого. Теперь мой вопрос: Как я могу сохранить данные о количестве нужного продукта в полях ACF под моим сообщением?

Идентификаторы полей

acf-field_6163f2e1542e1
acf-field_61640103002c9

Имена полей

acf[field_6163f2e1542e1]
acf[field_61640103002c9]

Я был бы очень признателен за помощь. Заранее спасибо!

I was able to upgrade my code to this:

 function create_post_after_order( $order_id ) {
  if (  $order_id instanceof WC_Order ){
    return;
  }
    
  $order = wc_get_order( $order_id );
  $order_items = $order->get_items(); 
    
    foreach ( $order_items as $item_id => $item_data ) {
    $product = $item_data->get_product();
    $qty.= $item_data->get_quantity();
    $name.= $product->get_name();
  }
    
    $new_post = array(
    'post_title' => "Order {$order_id}",
    'post_content' => $content,
    'post_status' => 'private',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'groeiproces',
    'post_status' => 'publish',
  );    
  $post_id = wp_insert_post($new_post);
    
    $classs_field_key = 'field_61645b866cbd6';
    $classs_subfield_key = 'field_61645b916cbd7';
    $classs_items = array($name,$name,$name);

    foreach ($classs_items as $classs_items_value) {
        $classs_value[] = array($classs_subfield_key => $classs_items_value);
        update_field($classs_field_key, $classs_value, $post_id);
    }
    
}
add_action( 'woocommerce_thankyou', 'create_post_after_order', 10, 1 );
 

Теперь я могу сохранить название продукта и количество в поле массива. Но проблема в том, что строки заказа объединены. Как разделить строки заказа, чтобы каждая строка заказа была одной строкой массива?

Текущая ситуация

введите описание изображения здесь

Спасибо, что помогли мне!

Комментарии:

1. Поскольку вы вызываете wp_insert_post, вы можете позвонить после этого save_post() — developer.wordpress.org/reference/hooks/save_post .

2. Спасибо за вашу реакцию. Не могли бы вы дать мне более полное представление о том, как я должен реализовать это в своем коде?

3. Для этого вам нужно поле повторителя. Вы хотите, чтобы данные о каждом продукте сохранялись в отдельном поле, верно ? Проверьте форум acf — support.advancedcustomfields.com/forums/topic/…

4. Спасибо, что указали мне правильное направление. Я смог обновить свой код. Но у меня осталась одна проблема.