在Woocommerce中以编程方式应用优惠券
2022-08-30 12:56:00
在Woocommerce中,我试图找到一种方法,如果购物车中的重量超过100磅,则可以对整个客户的订单应用10%的折扣。我正在实现这一目标。对于下一步,我正在寻找一种通过函数的操作/钩子以编程方式应用优惠券代码的方法.php。
看来我可以使用woocommerce_ajax_apply_coupon函数来做到这一点(http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html),但我不确定如何使用它。
到目前为止,我已经修改了购物车.php为了获得购物车中所有产品的总重量,我创建了一个应用折扣的优惠券(如果手动输入),并且我已经向函数添加了一些代码.php检查重量并向用户显示消息。
编辑:删除了部分代码,完成了包含在以下解决方案中的代码。
感谢您的指导弗雷尼。以下是在满足条件时成功应用折扣券并在不再满足条件时将其删除的工作最终结果:
/* 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();
}
}