W Woocommerce próbuję znaleźć sposób na zastosowanie 10% zniżki do całego zamówienia klienta, jeśli waga w koszyku przekracza 100 funtów. Jestem po części sposobem na osiągnięcie tego. W następnym kroku szukam sposobu, aby programowo zastosować kod kuponu poprzez akcję/hook poprzez functions.php.Jak programowo zastosować kupon w Woocommerce?
Wygląda na to, że mogę to zrobić za pomocą funkcji woocommerce_ajax_apply_coupon (http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html), ale nie jestem pewien, jak z niego korzystać.
Do tej pory zmodyfikowałem cart.php, aby uzyskać całkowitą wagę wszystkich produktów w koszyku, utworzyłem kupon, który stosuje zniżkę (jeśli wprowadzono ręcznie) i dodałem kod do funkcji .php, aby sprawdzić wagę i wyświetlić komunikat dla użytkownika.
EDYCJA: Usunięto częściowy kod, skompletowany kod zawarty w poniższym rozwiązaniu.
Dzięki za poradę Freney. Oto działa efekt końcowy, który z powodzeniem stosuje kupon rabatowy, gdy warunek jest spełniony, a także usuwa go, gdy nie jest już spełniony:
/* 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();
}
}
Ponieważ mam już kupon na zapleczu: "999" Dodałem tylko kod, który podałeś, aby zastosować kupon. Jednakże, gdy przejdę na stronę koszyka woocommerce, otrzymuję teraz błąd: wywołanie funkcji member add_discount() na obiekcie innym niż obiekt w [path to ...] functions.php na linii 65 [instrukcja if z add_discount]. Zaktualizowałem kod w moim oryginalnym wpisie, aby pokazać, jak to wygląda. – msargenttrue
Spróbuj dodać 'global $ woocommerce;' wraz z linią '$ total_weight'. – Freney
Dziękuję, to zadziałało! Więc teraz jestem w stanie z powodzeniem zastosować zniżkę, ale teraz zauważam inny problem ... Jeśli użytkownik usunie niektóre przedmioty z koszyka, a wózek wróci do 100 funtów lub mniej, zniżka nadal istnieje. Szukam sposobu na usunięcie zniżki, jeśli koszyk nie spełnia już warunku, więc użytkownicy nie będą mogli wykorzystać tego kuponu. Spodziewam się, że istnieje funkcja remove_discount, która działa w przeciwny sposób do add_discount, ale nie udało mi się znaleźć jej w dokumentach API Woocommerce: http://docs.woothemes.com/wc-apidocs/ – msargenttrue