#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. Спасибо, что указали мне правильное направление. Я смог обновить свой код. Но у меня осталась одна проблема.