Как сделать функцию создания товара в корзине и заказ?

Продолжение темы создания заказа (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);

в 16.02.2016.
Добавить Комментарий

ладно, не то это, не работает ничего.
спасибо

Вы хоть id продуктов из корзины получили?

в 16.02.2016.
Добавить Комментарий

Да, у меня там 1 товар

Не получилось 2 добавить в корзину или в order?

в 16.02.2016.
Добавить Комментарий

В 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 с помощью кода, наличие заказа в корзине не обязательно.

Честно не понимаю что именно у вас не получается…

в 16.02.2016.

Изменим цену в корзине

 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 - новая цена в  корзине
 }
 }
 }
 

в 16.02.2016.

пример очистки корзины:

 add_action('wp', '___4');
function ___4() {
 global $woocommerce;
 // очистим корзину
 $woocommerce->cart->empty_cart();
 }
 

в 16.02.2016.
Добавить Комментарий

тут получается 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;
 

которая отобразится в админке, чем не устраивает данный вариант?

в 21.02.2016.

если хотите менять цену продукта при покупке  — просто меняйте ее при калькуляции, либо используйте купоны.И то и другое описывал.

в 21.02.2016.
Добавить Комментарий

если есть решение, то круто)

если нет, то я подумал можно же товару сделать 0 руб., а при вводе купона брать у него значение и потом в Доставке через формулу делать нужную сумму)

Добавить Комментарий

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

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.