Создание заказа WooCommerce программно для продукта подписки - PullRequest
1 голос
/ 29 мая 2019

С woocommerce я использую плагин WooCommerce Subscription.Я создал функцию, которая может создавать заказ на основе SKU продукта с использованием функции wc_get_product_id_by_sku() из продукта подписки.

В данный момент это моя функция:

function create_new_order() {
    global $woocommerce;

    $address = array(
        'first_name' => 'Zakup',
        'last_name'  => 'Sklepowy',
        'email'      => 'test@test.pl',
        'phone'      => '123',
        'address_1'  => 'ul. Przykladowa 1',
        'address_2'  => 'm. 2',
        'city'       => 'Wroclaw',
        'postcode'   => '50-123',
    );


    $order = wc_create_order();

    $product = new WC_Product( wc_get_product_id_by_sku( 'wpoh-prof-webshop' ) );
    $order->add_product( $product, 1 );
    $order->set_address( $address, 'billing' );

    // Set payment gateway
    $payment_gateways = WC()->payment_gateways->payment_gateways();
    $order->set_payment_method( $payment_gateways['cod'] );

    // Calculate totals
    $order->calculate_totals();
    $order->update_status( 'completed', 'In Store ', true );
}

Сэта строка:

$product = new WC_Product (wc_get_product_id_by_sku ('wpoh-prof-webshop'));

Я забираю товар, который будет размещен вместе с заказом.В этой функции я жестко запрограммировал адрес для выставления счета клиенту.

Когда я запускаю функцию, создается пустой заказ, к которому не привязан ни один продукт или адрес.

заказсоздано без личной информации или продукта:

order created without personal information or product

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

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Чтобы получить один из следующих объектов продукта подписки:

  • WC_Product_Subscription (тип продукта subscription, простая подписка) ,
  • WC_Product_Variable_Subscription (тип продукта variable-subscription) ,
  • WC_Product_Subscription_Variation (тип продукта subscription_variation) .

Вы можете не использовать new WC_Product(), так как это выдаст ошибку .

Вместо этого следует использовать функцию wc_get_product().

Теперь global $woocommerce; не требуется и ничего не делает.

SKU: Получить объект продукта из идентификатора продукта с помощью функции wc_get_product_id_by_sku():

SKU всегда должен быть из простой подписки или вариативной подписки, но никогда из продукта с переменной подпиской…

Попробуйте следующую слегка измененную функцию:

function create_new_order() {
    $sku = 'wpoh-prof-webshop';
    $address = array(
        'first_name' => 'Zakup',
        'last_name'  => 'Sklepowy',
        'email'      => 'test@test.pl',
        'phone'      => '123',
        'address_1'  => 'ul. Przykladowa 1',
        'address_2'  => 'm. 2',
        'city'       => 'Wroclaw',
        'postcode'   => '50-123',
    );

    $order = wc_create_order(); // Create a WC_Order object and save it.

    $order->set_address( $address, 'billing' ); // Set customer billing adress

    $product = wc_get_product( wc_get_product_id_by_sku( $sku ) );
    $order->add_product( $product, 1 ); // Add an order line item

    // Set payment gateway
    $payment_gateways = WC()->payment_gateways->payment_gateways();
    $order->set_payment_method( $payment_gateways['cod'] );

    $order->calculate_totals(); // Update order taxes and totals
    $order->update_status( 'completed', 'In Store ', true ); // Set order status and save
}

Проверено и работает.

Связанный ответ: Получите объект товара из sku и обновите цену в WooCommerce

0 голосов
/ 03 июня 2019

Мартен де Вольф, вы можете добавить его в отдельный файл .php, но его необходимо принять, добавив:

require(dirname(__FILE__) . '/wp-load.php');

перед сценарием (он загружается без сессии).информация - что вы вошли как администратор).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...