В Woocommerce Я пытаюсь найти способ применить 10% скидку на весь заказ клиента, если вес в тележке превышает 100 фунтов. Я часть пути к достижению этого. На следующем шаге я ищу способ программно применить код купона через action/hook через функции.php.Как программно применять купон в Woocommerce?
Похоже, что я могу использовать функцию woocommerce_ajax_apply_coupon для этого (http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html), но я не уверен, как ее использовать.
До сих пор я модифицировал cart.php, чтобы получить общий вес всех продуктов в корзине, я создал купон, который применяет скидку (если введено вручную), и я добавил некоторый код к функциям .php, чтобы проверить вес и отобразить сообщение пользователю.
EDIT: Отменён неполный код, код не включен в нижеуказанное описание.
Спасибо за руководство Freney. Вот рабочий конечный результат, который успешно применяет купон на скидку при выполнении условия, а также удаляет его, когда он больше не встречались:
/* Mod: 10% Discount for weight greater than 100 lbs
Works with code added to child theme: woocommerce/cart/cart.php lines 13 - 14: which gets $total_weight of cart:
global $total_weight;
$total_weight = $woocommerce->cart->cart_contents_weight;
*/
add_action('woocommerce_before_cart_table', 'discount_when_weight_greater_than_100');
function discount_when_weight_greater_than_100() {
global $woocommerce;
global $total_weight;
if($total_weight > 100) {
$coupon_code = '999';
if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
echo '<div class="woocommerce_message"><strong>Your order is over 100 lbs so a 10% Discount has been Applied!</strong> Your total order weight is <strong>' . $total_weight . '</strong> lbs.</div>';
}
}
/* Mod: Remove 10% Discount for weight less than or equal to 100 lbs */
add_action('woocommerce_before_cart_table', 'remove_coupon_if_weight_100_or_less');
function remove_coupon_if_weight_100_or_less() {
global $woocommerce;
global $total_weight;
if($total_weight <= 100) {
$coupon_code = '999';
$woocommerce->cart->get_applied_coupons();
if (!$woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
$woocommerce->cart->calculate_totals();
}
}
Поскольку у меня уже есть купон в бэкэнд: «999», я добавил только код, который вы предоставили для применения купона. Однако, когда я перехожу на страницу корзины woocommerce, я получаю сообщение об ошибке: вызовите функцию-член add_discount() для не-объекта в [path to ...] functions.php в строке 65 [инструкция if с помощью add_discount]. Я обновил код в своем исходном сообщении, чтобы показать вам, как он выглядит. – msargenttrue
Попробуйте добавить 'global $ woocommerce;' вместе с вашей линией '$ total_weight'. – Freney
Спасибо, это сработало! Так что теперь я могу успешно применять скидку, но теперь я замечаю еще одну проблему ... Если пользователь удаляет некоторые элементы корзины, и тележка возвращается к 100 фунтам или меньше, тогда скидка все еще существует. Я ищу способ удалить скидку, если корзина больше не соответствует условиям, поэтому пользователи не смогут использовать этот купон. Я бы ожидал, что там будет функция remove_discount, которая работает противоположным способом add_discount, но я не смог найти ее в документах API Woocommerce: http://docs.woothemes.com/wc-apidocs/ – msargenttrue