在Woocommerce中,如果購物車的重量超過100磅,我試圖找到一種方法對整個客戶的訂單應用10%的折扣。我是實現這一目標的一部分。對於下一步,我正在尋找一種方法來通過functions.php通過action/hook以編程方式應用優惠券代碼。如何以編程方式在Woocommerce中應用優惠券?
看來我可以使用函數woocommerce_ajax_apply_coupon來做到這一點(http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html),但我不確定如何使用它。
到目前爲止,我已經修改cart.php得到的所有產品的總重量的車,我已經創建了一個應用折扣(如果手動輸入)的優惠券,我已經添加了一些代碼的功能.php來檢查重量並向用戶顯示一條消息。
編輯:刪除了部分代碼,完成的代碼包含在下面的解決方案中。
感謝您的指導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購物車頁面時,我現在收到錯誤:在第65行[if語句與add_discount]的[path to ...] functions.php中的非對象上調用成員函數add_discount()。我更新了原始帖子中的代碼,向您展示了它的外觀。 – msargenttrue
嘗試添加'global $ woocommerce;'以及'$ total_weight'行。 – Freney
謝謝,工作!所以,現在我能夠成功應用折扣,但現在我注意到另一個問題...如果用戶刪除了一些購物車物品,並且購物車回到100磅或更少,那麼折扣仍然存在。如果購物車不再符合條件,用戶將無法利用此優惠券,我正在尋找一種方法來取消折扣。我期望有一個remove_discount函數,它的作用方式與add_discount相反,但我無法在Woocommerce API文檔中找到它:http://docs.woothemes.com/wc-apidocs/ – msargenttrue