Как применить код купона на товар в заказе (order) woocommerce с помощью кода

Если я правильно понял, то вам нужно при покупки добавлять купон со скидкой.
Для этого должны быть активированы купоны(в админке) у плагина woocommerce.

Приведу пример кода, который добавит скидку с купоном, если сумма заказа более 5000


add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );
function apply_matched_coupons() {

global $woocommerce;
$coupon_code = '10_coupon'; // Код купона
if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;
if ( $woocommerce->cart->cart_contents_total >= 5000 ) {

$woocommerce->cart->add_discount( $coupon_code );

$woocommerce->show_messages();

}
}


10_coupon — название вашего купона.

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

А если добавлять всегда (независимо от суммы) в коде, который представлен выше в другом вопросе?

Значит следующее условие нужно удалить:


if ( $woocommerce->cart->cart_contents_total >= 5000 ) {
}

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

Если просто добавить купон к ордеру, смотрите в сторону функции:


/**

* Add coupon code to the order.

*

* @param string $code

* @param int $discount_amount

* @param int $discount_amount_tax "Discounted" tax - used for tax inclusive prices.

* @return int|bool Item ID or false.

*/

add_coupon( $code, $discount_amount = 0, $discount_amount_tax = 0 );

Применение:


$order->add_coupon( 'название купона', 10, 0 );

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

Так делал, но он не применяется к заказу. В информации есть, а как скидку не считает.

Возможно после добавления купона нужно произвести расчет:

 $order->calculate_shipping();
 $order->calculate_totals();
 

в 08.02.2016.

Вот так примерно:

 $order->add_coupon($coupon_code, 99.99);
 $order->set_total(99.99, 'order_discount');
 $order->calculate_totals();
 $order->payment_complete();
 

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

Вот хоть убей, не хочет обновлять ценник))

Возможно будет не правильно чуть но цену можно изменить способом описанным тут:
http://onwp.ru/question/kak-v-woocommerce-izmenit-cenu-v-zavisimosti-ot-kolichestva-produktov

в 08.02.2016.

Как вариант попробуйте:

 $kupon = new WC_Coupon( 'название_курона');
 $amount = $kupon->get_discount_amount( $product->price );
 $order->add_coupon( 'название_курона', $amount, $amount );
$order->calculate_shipping();
 $order->calculate_totals();
 

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

RE: Как применить код купона на товар в заказе (order) woocommerce с помощью кода


🙁
и получил данные $amount так:
$kupon = new WC_Coupon('название_курона');
$amount = $kupon->coupon_amount;
$order->add_coupon( 'название_курона', $amount, $amount );

так выдает 0:

$kupon -> get_discount_amount( $product -> price );

возможно проблема с купонами??? я делал Посчитать итог в обзоре заказа — купон не читает. Стоимость остается той же

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

А ценник изменить в order нельзя? потому что по задумке ценник задается из переменной (она считается как калькулятор)

Просто цену, я писал выше:
http://onwp.ru/question/kak-v-woocommerce-izmenit-cenu-v-zavisimosti-ot-kolichestva-produktov

А в настройка вукоммерса купоны активированы? Купон сам создан, с ценой скидки? Название купона правильное? Цена скидки как в купоне?
Сумма скидки и название купона должны совпадать, как в коде так и в настройках.

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

Про цену это же в functions, а в order как?

 foreach ( $cart_object->cart_contents as $key => $value ) {
 if($value['quantity'] > 5){
 $discount = $value['data']->price * 0.10;
 $value['data']->price = $value['data']->price - $discount;
 }
 

А по купону верно все, название же ввожу, а остальные параметры он берет сам, в настройках купоны включены:

 $kupon = new WC_Coupon('название_курона');
 $amount = $kupon->coupon_amount;
 $order->add_coupon( 'название_курона', $amount, $amount );
 

У Вас работает?

У вас в админке купон называется «название_курона»?

Как в woocommerce изменить цену в зависимости от количества продуктов?


Этот код срабатывает когда вызывается расчет calculate_totals и если более 5 продуктов покупается, то считаем скидку и вычитаем ее из основной цены.

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

В админке у меня 111111
это я тут для примера написал

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

«Этот код срабатывает когда вызывается расчет calculate_totals и если более 5 продуктов покупается, то считаем скидку и вычитаем ее из основной цены.»

это я понимаю, но я же делаю Заказ (order) на своей отдельной странице. Там у меня идет форма с калькулятором. Поэтому цена всегда разная генерируется, в зависимости от выбранных параметров.

А что тогда мешает со своей формы передать параметр в котором будет правильная цена и сразу ее указать при создании ордера?

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

Передать параметр в functions.php?

в cart или в вашу функцию которая начинает создавать ордер.

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

Дело в том, что я не понимаю, как мне в функции, которая order создает передать параметр цены. То что выше для functions.php не работает..в функции создания order, а если вставлять в functions.php то работает в корзине.

Подскажите как мне в order добавить?))))

сейчас такой код

$product = '614';
// Добавляем новый заказ, он пустой, потом будем добавлять в него данные
$order_args = array(
'status' => '',
'customer_id' => null, // id пользователя который сделал заказ
'customer_note' => null,
'order_id' => 0,
'created_via' => '',
'parent' => 0
);
$order = wc_create_order($order_args);
// Получаем и сразу же добавляем данные о продукте который покупает пользователь get_current_user_id()
$order->add_product(get_product($product), 1);
// Заполняем информацию о пользователе который сделал покупку и информацию о доставке
$address_billing = array(
'first_name' => get_user_meta(get_current_user_id(), 'billing_first_name', true),
'last_name' => get_user_meta(get_current_user_id(), 'billing_last_name', true),
'company' => get_user_meta(get_current_user_id(), 'billing_company', true),
'email' => get_user_meta(get_current_user_id(), 'billing_email', true),
'phone' => get_user_meta(get_current_user_id(), 'billing_phone', true),
'address_1' => get_user_meta(get_current_user_id(), 'billing_address_1', true),
'address_2' => get_user_meta(get_current_user_id(), 'billing_address_2', true),
'city' => get_user_meta(get_current_user_id(), 'billing_city', true),
'state' => get_user_meta(get_current_user_id(), 'billing_state', true),
'postcode' => get_user_meta(get_current_user_id(), 'billing_postcode', true),
'country' => get_user_meta(get_current_user_id(), 'billing_country', true)
);
$address_shipping = array(
'first_name' => get_user_meta(get_current_user_id(), 'shipping_first_name', true),
'last_name' => get_user_meta(get_current_user_id(), 'shipping_last_name', true),
'company' => get_user_meta(get_current_user_id(), 'shipping_company', true),
'address_1' => get_user_meta(get_current_user_id(), 'shipping_address_1', true),
'address_2' => get_user_meta(get_current_user_id(), 'shipping_address_2', true),
'city' => get_user_meta(get_current_user_id(), 'shipping_city', true),
'state' => get_user_meta(get_current_user_id(), 'shipping_state', true),
'postcode' => get_user_meta(get_current_user_id(), 'shipping_postcode', true),
'country' => get_user_meta(get_current_user_id(), 'shipping_country', true)
);
$order->set_address($address_billing, 'billing');
$order->set_address($address_shipping, 'shipping');
//Добавление доп.полей
if ( sizeof( $order->get_items() ) > 0 ) {
foreach ( $order->get_items() as $id => $item ) {
wc_update_order_item_meta( $id, '_random_number', rand() );
// или wc_add_order_item_meta()
}
}
// Добавим статус "платеж выполнен"
//$order->update_status('processing');
// данные о покупке (цена и сниппет под названием)
$shipping = new stdClass();
$shipping->label = 'Code pay';
$shipping->id = 'code_pay';
$shipping->cost = 100;
$shipping->taxes = array();
$order->add_shipping($shipping);
$kupon = new WC_Coupon('UNIQUECODE');
$amount = $kupon->coupon_amount;
$order->add_coupon('UNIQUECODE', $amount, $amount);
$order->set_total($amount, 'order_discount');
// Обновим данные о покупке и рассчитаем итоговою стоимость
$order->calculate_totals();
$order->calculate_shipping();
//$order->payment_complete();
//Редирект на страницу Спасибо!
payment_redirect($order);
function payment_redirect($order) {
// берем класс для рабы в вукомерс с оплатой
$class_woo = new WC_Gateway_COD();
// получим данные о платеже
$url_redirect = $class_woo->get_return_url($order);
//сосатвим массив
$arr_json = array(
"result" => "success",
"redirect" => $url_redirect
);
// вернем правильный ответ в зависимости от типа запроса
if (is_ajax()) { // если ajax
echo json_encode($arr_json);
// echo '<!--WC_START-->{"result":"success","redirect":"' . addslashes($url_redirect) . '"}<!--WC_END-->';
exit;
} else {
wp_redirect($url_redirect);
exit;
}
wp_die();
}

Данный код ни о чем не говорит.  Я и так представлял что он у вас есть и написан примерно так.
Я вам предлагал передавать к этому коду переменную, которая например получается при расчетах вашего калькулятора.  и вписывать вместо цены.

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

В этом же коде нет цен…товар же берем, у которого уже есть цена…разве нет? Может я что-то не вижу

А я вот хочу чтоб «передавать к этому коду переменную, которая например получается при расчетах вашего калькулятора.  и вписывать вместо цены»
Но как???

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

Как с Вами еще можно связаться? Есть предложение за оплату

Email: onlajn@_bk_.ru (без _ )

Но я бы на вашем месте просто переформулировал бы вопрос.
Я ведь всего лишь спрашивал после каких действий вы выполняете код.

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

Ваш ответ

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