Задать вопрос
@lil_koi
лучший из худших

Как правильно обработать форму создания заказа?

Добрый день, я пишу магазин на вордпресс и дошёл до создания заказа. Написал свою страницу и свою форму обработки
<form method="POST" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
/// код формы
</form>

Я не знаю, как правильно обрабатывать форму создания заказа и на данный момент ,мой код создания заказа выглядит так
add_action('admin_post_create_order', 'create_order');
add_action('admin_post_nopriv_create_order', 'create_order');

function create_order()
{
    global $woocommerce;
    // var_dump(123);
    // print_r($_POST);
    $order = wc_create_order();
    $cards = $woocommerce->cart;
    var_dump($cards);
    exit;
    //заполняем заказ товаром
    foreach ($cards as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $product_id = $product->get_id();
        $quantity = $cart_item['quantity'];
        $subtotal = $cart_item['line_subtotal'];

        // Добавляем товар в заказ
        $order->add_product($product, $quantity);

        // Добавляем мета-данные для товара в заказ
        $order->update_meta_data('_product_id', $product_id, $cart_item_key);
        $order->update_meta_data('_quantity', $quantity, $cart_item_key);
        $order->update_meta_data('_subtotal', $subtotal, $cart_item_key);
    }
    $order->set_billing_email($_POST["email"]);
    $order->set_billing_first_name($_POST["name"]);
    $order->set_billing_last_name($_POST["last_name"]);
    $order->set_billing_address_1($_POST["address"]);
    // $order->set_billing_city('');
    // $order->set_billing_state('CA');
    // $order->set_billing_postcode('12345');
    $order->set_billing_country('EU');
    $order->set_billing_phone($_POST["phone"]);

    // устанавливаем способ оплаты
    $payment_gateways = WC()->payment_gateways->get_available_payment_gateways();
    // $order->set_payment_method($payment_gateways['paypal']);
    // сохраняем заказ
    $order->calculate_totals();
    $order->save();
    wp_redirect(get_page_link(38, false, true));
    wp_die();
}

В чём собственно проблема - я не могу получить корзину товара. Как я только не пытался. Класс WC не инициализирован, пошёл другим путём, сделал
global $woocommerce;
Но при вызове
$woocommerce->cart;
Получаю null и естественно вызывая метод
$cards = $woocommerce->cart->get_cart();
Получаю ошибку. Что я делаю не так?
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
YBB
@YBB
В какой из уже не сильно свежих версий авторы WC радикально перешли от свойств (переменных) к методам (функциям).
Попробуйте так
$cart = WC()->cart->get_cart();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы