Как применить код купона на товар в заказе (order) woocommerce с помощью кода
Нужна помощь в дополнении
http://onwp.ru/question/kak-s-pomoshhyu-koda-dobavit-novyj-orderzakaz-v-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 ) { }
Если просто добавить купон к ордеру, смотрите в сторону функции:
/** * 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();

Вот так примерно:
$order->add_coupon($coupon_code, 99.99); $order->set_total(99.99, 'order_discount'); $order->calculate_totals(); $order->payment_complete();
Вот хоть убей, не хочет обновлять ценник))

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

Как вариант попробуйте:
$kupon = new WC_Coupon( 'название_курона'); $amount = $kupon->get_discount_amount( $product->price ); $order->add_coupon( 'название_курона', $amount, $amount ); $order->calculate_shipping(); $order->calculate_totals();
🙁
и получил данные $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
А в настройка вукоммерса купоны активированы? Купон сам создан, с ценой скидки? Название купона правильное? Цена скидки как в купоне?
Сумма скидки и название купона должны совпадать, как в коде так и в настройках.
Про цену это же в 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 );
У Вас работает?

У вас в админке купон называется «название_курона»?
Этот код срабатывает когда вызывается расчет calculate_totals и если более 5 продуктов покупается, то считаем скидку и вычитаем ее из основной цены.
В админке у меня 111111
это я тут для примера написал
«Этот код срабатывает когда вызывается расчет calculate_totals и если более 5 продуктов покупается, то считаем скидку и вычитаем ее из основной цены.»
это я понимаю, но я же делаю Заказ (order) на своей отдельной странице. Там у меня идет форма с калькулятором. Поэтому цена всегда разная генерируется, в зависимости от выбранных параметров.

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

в cart или в вашу функцию которая начинает создавать ордер.
Дело в том, что я не понимаю, как мне в функции, которая 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(); }

Данный код ни о чем не говорит. Я и так представлял что он у вас есть и написан примерно так.
Я вам предлагал передавать к этому коду переменную, которая например получается при расчетах вашего калькулятора. и вписывать вместо цены.
В этом же коде нет цен…товар же берем, у которого уже есть цена…разве нет? Может я что-то не вижу
А я вот хочу чтоб «передавать к этому коду переменную, которая например получается при расчетах вашего калькулятора. и вписывать вместо цены»
Но как???
Как с Вами еще можно связаться? Есть предложение за оплату

Email: onlajn@_bk_.ru (без _ )
Но я бы на вашем месте просто переформулировал бы вопрос.
Я ведь всего лишь спрашивал после каких действий вы выполняете код.