Woocommerce - создайте заказ вручную с помощью кода - PullRequest
1 голос
/ 22 февраля 2020

Мне интересно, сможет ли кто-нибудь помочь мне с моим кодом?

Я бы хотел создать программный заказ в woocommerce, когда будет отправлена ​​моя гравитационная форма. Мне удалось заставить его работать, но я бы хотел, чтобы некоторая пользовательская мета была размещена под строкой товара в заказе.

Мне удалось получить мета в примечаниях к порядку, но в идеале это лучше всего сделать в мета-боксе.

Вот мой код:

add_action( 'gform_after_submission_56', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {
    global $woocommerce;
    // use this to find out $entry output
    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", 'On Hold', TRUE); 

    $order->add_order_note( $note ); 
}

1 Ответ

2 голосов
/ 22 февраля 2020

ПРИМЕЧАНИЕ: переменная $ values ​​не установлена ​​в вашем исходном примере кода

Пример

// set some variables
$user_id = 1;
$product_id = 30;
$quantity = 1;
$price = 10;
$note = 'my custom note';

$product = wc_get_product($product_id);

// Create the order object
$order = wc_create_order();
$order->add_product( $product, $quantity, $price);

foreach ($order->get_items() as $item_key => $item ) {
    $item->add_meta_data( 'Label', 'Value', true );
}

$order->set_customer_id( $user_id );
$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order->update_status('on-hold', 'pending', TRUE); 

$order->add_order_note( $note );

Итак в вашем коде эта часть

$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 = wc_create_order();
$order->set_customer_id( $user_id );

$order->add_product( wc_get_product($product_id), $quantity, $prices);

foreach ($order->get_items() as $item_key => $item ) {
    $item->add_meta_data( 'Label', 'Value', true );
}

$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order->update_status( 'on-hold', 'pending', TRUE); 

$order->add_order_note( $note );
...