Как сделать функцию создания товара в корзине и заказ?
Продолжение темы создания заказа (order) через код
Можно ли создать или загрузить товар в корзину и отправить заказ с применением купона как были ответы в других темах.
Суть:
1. Отправляю форму и она создает новый товар в корзине.
2. Дальше применяются функции, которые меняют цену и применяют скидку в корзине (функции, которые были в других темах в functions.php)
3. Создается новый заказ и корзина отчищается)
Как-то так.
Для добавления к корзину товара можете использовать код с этого вопроса:
Как в woocommerce добавить товар в корзину с помощью кода?
Далее можно изменить цену использую следующий код:
Как в woocommerce изменить цену в зависимости от количества продуктов?
Очистка корзины:
global $woocommerce; // очистим корзину $woocommerce->cart->empty_cart();
как отправить все в Order, то что получаю тут?
$woocommerce->cart->get_cart()

Попробуйте получить данные из корзины(об этом я писал)
и 2 или более раз использовать функцию
$order->add_product(get_product($product), 1);
ладно, не то это, не работает ничего.
спасибо

Вы хоть id продуктов из корзины получили?
Да, у меня там 1 товар

Не получилось 2 добавить в корзину или в order?
В order не могу передать.
точнее как написать, чтоб в ордер с новыми ценами товар этот улетел из корзины

add_action('wp', '___f0'); function ___f0() { if (!is_admin()) { ___f1(); ___f3(); } } function ___f1() { if (!is_admin()) { global $woocommerce; $product_id = 2069; // id продукта 2069 $found = false; if (sizeof($woocommerce->cart->get_cart()) > 0) { foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { $_product = $values['data']; if ($_product->id == $product_id) $found = true; } if (!$found) $woocommerce->cart->add_to_cart($product_id); } else { $woocommerce->cart->add_to_cart($product_id); } } } function ___f3() { global $current_user; get_currentuserinfo(); $order_args = array( 'status' => '', 'customer_id' => $current_user->ID, 'customer_note' => null, 'order_id' => 0, 'created_via' => '', 'parent' => 0 ); $order = wc_create_order($order_args); $order->add_product(get_product(2069), 1); // id продукта 2069 $order->update_status('completed'); $shipping = new stdClass(); $shipping->label = 'Sale'; // название доставки $shipping->id = 'sale'; $shipping->cost = -0.50; // будет скидка -0.50$ $shipping->taxes = array(); $order->add_shipping($shipping); $order->calculate_shipping(); $order->calculate_totals(); }
Данный пример, при каждой загрузки страницы пользователей(страницы сайта, а не админки).
Будет добавляться в корзину товар с id 2069 и делаться order с скидкой 0.50$
Скидка сделана через shipping(доставку)
Про дисконт я вам уже писал.
Для создания order с помощью кода, наличие заказа в корзине не обязательно.
Честно не понимаю что именно у вас не получается…

Изменим цену в корзине
function ___f0() { if (!is_admin()) { ___f1(); ___f2(); ___f3(); } }
и сама функция
function ___f2() { $data_cart = WC()->cart->get_cart(); if (!empty($data_cart)) { foreach ($data_cart as $values) { $values['data']->price = 13; // 13 - новая цена в корзине } } }

пример очистки корзины:
add_action('wp', '___4'); function ___4() { global $woocommerce; // очистим корзину $woocommerce->cart->empty_cart(); }
тут получается 2 варианта разных.
1. Где делаем скидку — это просто через код добавляется ордер с отрицательной доставкой. Но цена идет изначально от товара, которую указывали.
2. Это просто добавление товара в корзину с новой ценой.
Суть до чего пытаюсь дойти: Товар нужен в ORDER с новой ценой, которая меняется
function ___f2() { $data_cart = WC()->cart->get_cart(); if (!empty($data_cart)) { foreach ($data_cart as $values) { $values['data']->price = 13; // 13 - новая цена в корзине } } }
И создаваться он должен без нажатия на Оформить заказ и Подтвердить заказ, он должен создаваться после нажатия на рандомную кнопку, которую я создам.
Нажал на кнопку, у меня добавился товар с новой ценой, в добавок купон применился и создался ЗАКАЗ.
В функции
function ___f3()
товар не берет новую цену из корзины, он берет цену из параметров, которые уже заданы в Каталоге товаров

Товар берет цену из корзины и делает скидку за «доставку», которая учитывается в ордере.
f2 — функция — просто для отображения, а Цену меняет
$shipping->cost = -0.50;
которая отобразится в админке, чем не устраивает данный вариант?

если хотите менять цену продукта при покупке — просто меняйте ее при калькуляции, либо используйте купоны.И то и другое описывал.
если есть решение, то круто)
если нет, то я подумал можно же товару сделать 0 руб., а при вводе купона брать у него значение и потом в Доставке через формулу делать нужную сумму)
ладно, решил сделать просто товар с 0 ценой, а дальше уже работать через доставку. Спасибо)
так и не вышло объяснить, что цену нужно было менять за сам товар) а потом уже чтоб новая цена менялась с учетом скидки и т.д. функция выше все равно не из корзины берет новые цены) она берет из Каталога) из цены, которую указали при добавлении товара) трестировал уже…