Наверное кто хоть раз сталкивались с созданием интернет-магазина на Woocommerce знают о его громоздкой и не приспособленной для стран СНГ странице checkout. (P.S. да, я знаю о saphali и о множестве плагинов для её редактирования, но речь сейчас не об этом).
В одном из проектов мне понадобилось оформлять заказ прям из корзины, вообще минуя эту страницу и с минимумом полей для ввода. Выглядело это примерно так:
В WC для этого есть функция wc_create_order() которая создаёт новый заказ и возвращает его в виде объекта в который мы можем добавить нужные свойства.
$order=wc_create_order(); //создаём новый заказ //Записываем в массив данные о доставке заказа и данные клиента $address = array( 'first_name' => $first_name, 'last_name' => $last_name, 'company' => '', 'email' => $email, 'phone' => '', 'address_1' => $adress_one, 'address_2' => $adress_two, 'city' => $city, 'state' => '', 'postcode' => $postcode, 'country' => '' ); $order->add_product( get_product( '99' ), 1 );//Добавляем в заказ товары: 99-ID товара, 1-количество $order->set_address( $address, 'billing' ); //Добавляем данные о доставке $order->set_address( $address, 'shipping' ); // и оплате $order->calculate_totals(); //подбиваем сумму и видим что наш заказ появился в админке
Это минимальные данные нужные для оформления заказа (кол-во элементов в массиве можно уменьшить, заполнив только необходимые поля).
Так же вы можете использовать методы описсаные на странице WooCommerce API: http://docs.woothemes.com/wc-apidocs/class-WC_Order.html. Я для сокращённой формы заказ использовал так-же:
$order->add_order_note($comment); //добавляет комментарий к заказу $order->update_status('processing', $payment); //устанавливает статус заказа "В обработке" (в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту) и записываем информацию об оплате
Почему не написали куда этот код вставлять?
В коде неточность: вместо $order=>add_product нужно $order->add_product, и во всех остальных методах также.
Да, конечно, спасибо что заметили, плагин подсветки кода почему-то изменил его.
Спасибо за пример! Пригодится для импорта 😉