Кнопка, которая создает заказ на WooCommerce для текущего продукта - PullRequest
2 голосов
/ 19 сентября 2019

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

Вот моя попытка:

if (isset($_POST['action'])) {
   switch ($_POST['action']) {

        case 'new_order':
            new_order();
            break;
    }
}

function new_order() {

    global $woocommerce;

    $address = array(
       'first_name' => $shippingName,
       'email'      => $user_email_id,
       'phone'      => $billingPhone,
       'address_1'  => $shippingAddress,
       'address_2'  => $shippingAddress2,
       'city'       => $shippingCity,
       'state'      => $shippingStateCode,
       'postcode'   => $shippingZip,
       'country'    => 'US');
    );

    $order = wc_create_order();
    $order->add_product( get_product());
    $order->set_address( $address, 'billing' );  
    $order->calculate_totals();   
    $order->update_status("Completed", 'Imported order', TRUE);
}

И Моя кнопка:

 <input type="submit" id="button" name="new_order" value="Submit" >

Это правильный путь?Любая помощь приветствуется.

1 Ответ

2 голосов
/ 19 сентября 2019

Обновлено 2 - Ваш код немного устарел, поскольку get_product() с некоторого времени заменяется wc_get_product().

1) Сначала функция, которая собираетсясоздать заказ (с переменной, которая обрабатывает идентификатор товара, добавленный к заказу) :

function trigger_new_order( $from_product_id ) {
    $address = array(
        'first_name' => "Joe",
        'last_name'  => "Doe",
        'email'      => "john.doe@gmail.com",
        'phone'      => "0123456789",
        'address_1'  => "1 St. James Street",
        'address_2'  => "",
        'city'       => "San Francisco",
        'state'      => "California",
        'postcode'   => "92105",
        'country'    => "US"
    );

    $order = wc_create_order( $from_product_id );

    $order->set_address( $address, 'billing' );
    $order->set_address( $address, 'shipping' ); // The Shipping address

    $product    = wc_get_product( $from_product_id );

    $order->add_product( $product );

    $order->calculate_totals();
    $order->update_status( 'completed', 'Imported order', true );

    // Display a message with the order number
    echo '<p>' . sprintf( __("Order #%d has been created"), $order->get_id() ) . '</p>';
}

Код помещается в файл functions.php вашего активного ребенкатема (или активная тема).


2) Форма с кнопкой отправки, которая собирается создать заказ

В приведенном ниже примеремы используем этот код на отдельных страницах продукта (на переднем конце) и динамически получаем идентификатор продукта:

if ( isset($_POST['new-order']) && $_POST['new-order'] === 'Submit' ) {
    trigger_new_order( get_the_id() );
} else {
    ?>
    <form class="new" method="post">
        <input class="button alt" type="submit" id="button" name="new-order" value="Submit" >
    </form>
    <?php
}
...