Ручное создание заказа с использованием ID продукта в WooCommerce

Вопрос или проблема

Я работаю над кодом для ручного создания заказа в 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 ); // Добавляем заметку как мета-данные
    }
}

Пояснение кода:

  1. Обработка действия после отправки формы: add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 ); – этот код запускает функцию post_to_third_party после отправки формы Gravity Forms с ID 56.

  2. Получение данных из формы: Используется функция rgar() для извлечения значений, отправленных в форме, таких как ID пользователя, заметка, ID продукта и количество.

  3. Создание заказа: Метод wc_create_order() создаёт новый заказ, а затем используется метод set_customer_id() для привязки заказа к пользователю.

  4. Добавление продукта: Метод add_product() добавляет продукт с указанным количеством в заказ.

  5. Установка адресов и расчёт итогов: Задаются адреса и рассчитываются итоги заказа.

  6. Добавление мета-данных: Мы проходим по всем элементам заказа и добавляем заметку как пользовательскую мета-данные с помощью add_meta_data().

Таким образом, после выполнения этого кода, вы сможете видеть заметку, прикреплённую к продуктам в админ-панели WooCommerce, что улучшит видимость пользовательской заметки в контексте каждого товара в заказе.

Оцените материал
Добавить комментарий

Капча загружается...