Вопрос или проблема
Я работаю над кодом для ручного создания заказа в WooCommerce из отправки формы Gravity.
У меня есть ‘пользовательские заметки’, которые я смог добавить в заметки заказа, НО в идеале это должно быть в мета-блоке под строкой продукта/товара.
Буду признателен за любые предложения (я самоучка и не эксперт).
Вот мой код:
add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {
global $woocommerce;
// используйте это, чтобы узнать вывод $entry
var_dump($entry);
// Убедитесь, что вы добавили скрытое поле где-то в форме с идентификатором продукта и определили его здесь. Если у вас есть какой-то другой способ определения продуктов в форме, вам нужно убедиться, что идентификатор продукта возвращается в переменной ниже.
$user_id =rgar( $entry, '97' );
$note = rgar( $entry, '53' );
$product_id = rgar( $entry, '71' );
$quantity = rgar( $entry, '73' );
$address = array(
'first_name' => rgar( $entry, '98' ),
'last_name' => rgar( $entry, '99' ),
'company' => rgar( $entry, '' ),
'email' => rgar( $entry, '83' ),
'phone' => rgar( $entry, '84' ),
'address_1' => rgar( $entry, '88.1' ),
'address_2' => rgar( $entry, '88.2' ),
'city' => rgar( $entry, '88.3' ),
'state' => rgar( $entry, '88.4' ),
'postcode' => rgar( $entry, '88.5' ),
'country' => rgar( $entry, '88.6' ),
);
$order = wc_create_order();
$order->set_customer_id( $user_id );
$order->add_product( wc_get_product($product_id), $quantity, $prices);
$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order->update_status("on hold", 'pending', TRUE);
$order->add_order_note( $note );
}
Я думаю, вы можете использовать следующее:
$order->update_meta_data( 'ВАШ_КЛЮЧ_МЕТА_ЗДЕСЬ', $note );
Не забудьте заменить ВАШ_КЛЮЧ_МЕТА_ЗДЕСЬ на предпочитаемый вами ключ,
Полный код:
add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {
global $woocommerce;
// используйте это, чтобы узнать вывод $entry
var_dump($entry);
// Убедитесь, что вы добавили скрытое поле где-то в форме с идентификатором продукта и определили его здесь. Если у вас есть какой-то другой способ определения продуктов в форме, вам нужно убедиться, что идентификатор продукта возвращается в переменной ниже.
$user_id =rgar( $entry, '97' );
$note = rgar( $entry, '53' );
$product_id = rgar( $entry, '71' );
$quantity = rgar( $entry, '73' );
$address = array(
'first_name' => rgar( $entry, '98' ),
'last_name' => rgar( $entry, '99' ),
'company' => rgar( $entry, '' ),
'email' => rgar( $entry, '83' ),
'phone' => rgar( $entry, '84' ),
'address_1' => rgar( $entry, '88.1' ),
'address_2' => rgar( $entry, '88.2' ),
'city' => rgar( $entry, '88.3' ),
'state' => rgar( $entry, '88.4' ),
'postcode' => rgar( $entry, '88.5' ),
'country' => rgar( $entry, '88.6' ),
);
$order = wc_create_order();
$order->set_customer_id( $user_id );
$order->add_product( wc_get_product($product_id), $quantity, $prices);
$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order->update_status("on hold", 'pending', TRUE);
$order->update_meta_data( 'ВАШ_КЛЮЧ_МЕТА_ЗДЕСЬ', $note );
}
Спасибо
Ответ или решение
Чтобы создать заказ вручную в WooCommerce из отправки формы Gravity Forms и добавить пользовательские заметки к продуктам, вы можете использовать следующий код. Он немного модифицирован, чтобы добавить заметки в виде пользовательской мета-данной, которая будет видна под строкой продукта в админке WooCommerce.
Вот пример кода, который поможет вам это сделать:
add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {
global $woocommerce;
// Извлекаем необходимые данные из отправленной формы
$user_id = rgar( $entry, '97' ); // ID пользователя
$note = rgar( $entry, '53' ); // Заметка
$product_id = rgar( $entry, '71' ); // ID продукта
$quantity = rgar( $entry, '73' ); // Количество товара
// Устанавливаем адрес пользователя
$address = array(
'first_name' => rgar( $entry, '98' ),
'last_name' => rgar( $entry, '99' ),
'email' => rgar( $entry, '83' ),
'phone' => rgar( $entry, '84' ),
'address_1' => rgar( $entry, '88.1' ),
'address_2' => rgar( $entry, '88.2' ),
'city' => rgar( $entry, '88.3' ),
'state' => rgar( $entry, '88.4' ),
'postcode' => rgar( $entry, '88.5' ),
'country' => rgar( $entry, '88.6' ),
);
// Создаем новый заказ
$order = wc_create_order();
$order->set_customer_id( $user_id );
// Добавляем продукт в заказ
$order->add_product( wc_get_product($product_id), $quantity );
// Устанавливаем адрес для счета
$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order->update_status("on hold", 'pending', TRUE);
// Добавляем пользовательскую мета-данные к продукту заказа
$line_items = $order->get_items();
foreach ( $line_items as $item_id => $item ) {
$item->add_meta_data( 'custom_note', $note ); // Добавляем заметку как мета-данные
}
}
Пояснение кода:
-
Обработка действия после отправки формы:
add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 );
– этот код запускает функциюpost_to_third_party
после отправки формы Gravity Forms с ID56
. -
Получение данных из формы: Используется функция
rgar()
для извлечения значений, отправленных в форме, таких как ID пользователя, заметка, ID продукта и количество. -
Создание заказа: Метод
wc_create_order()
создаёт новый заказ, а затем используется методset_customer_id()
для привязки заказа к пользователю. -
Добавление продукта: Метод
add_product()
добавляет продукт с указанным количеством в заказ. -
Установка адресов и расчёт итогов: Задаются адреса и рассчитываются итоги заказа.
-
Добавление мета-данных: Мы проходим по всем элементам заказа и добавляем заметку как пользовательскую мета-данные с помощью
add_meta_data()
.
Таким образом, после выполнения этого кода, вы сможете видеть заметку, прикреплённую к продуктам в админ-панели WooCommerce, что улучшит видимость пользовательской заметки в контексте каждого товара в заказе.