2015-11-16 120 views
4

这是我使用的代码:woocommerce申请优惠券编程错误

if (!is_admin()): 
add_action('woocommerce_before_cart', 'apply_matched_coupons'); 
//add_action('woocommerce_before_cart_table', 'apply_matched_coupons'); 
//add_action('woocommerce_before_checkout_form', 'apply_matched_coupons'); 

function apply_matched_coupons() { 
global $woocommerce; 
$coupon_code = 'somecodehere'; 

if ($woocommerce->cart->has_discount($coupon_code)) return; 

    if ($woocommerce->cart->cart_contents_total >= 1) { 
     $woocommerce->cart->add_discount($coupon_code); 
     wc_print_notices(); 
    } 

} 

endif; 

我遇到的问题是,当我去结帐页面的优惠券仍然得到应用。它不适用于购物车,这是所需的结果,但我不希望它在这种情况下应用。

任何帮助?

+0

我很困惑什么“条件”你在说什么。你能解释一下使用某种用户故事,发生的和预期的结果吗?即用户访问购物车,X发生,她然后继续结帐,Y发生,等等 – rnevius

+0

@ rnevius肯定和我甚至不知道我在做什么工作,因为我认为这是缓存不知何故。好。以下是大图:添加到购物车时添加优惠券代码。但是,如果您是购物车管理员或结算页面上的店铺管理员或经理,则不应用优惠券。下一阶段,我知道它的工作是随机添加它,如果你不是店管理员或经理,但我仍然在努力通过它 –

回答

4

根据你的解释,这听起来像你应该使用woocommerce_add_to_cart挂钩,当产品被成功添加到购物车其上运行。我也不认为你应该使用is_admin(),因为这只是检查你是否在管理页面上...如果当前用户是管理员,则不会。

我会做类似如下:

add_action('woocommerce_add_to_cart', 'apply_matched_coupons'); 

function apply_matched_coupons() { 
    // If the current user is a shop admin 
    if (current_user_can('manage_woocommerce')) return; 
    // If the user is on the cart or checkout page 
    if (is_cart() || is_checkout()) return; 

    $coupon_code = 'somecodehere'; 

    if (WC()->cart->has_discount($coupon_code)) return; 

    WC()->cart->add_discount($coupon_code); 
} 
+0

你真了不起。我甚至可以看到事情从我的最后变得过于复杂。现在我需要重构WC() - > cart-> add_discount($ coupon_code);随机运行。非常感谢你的朋友。 –