在 Woocommerce 中,我试图找到一种方法,如果购物车中的重量超过 100 磅,则为整个客户的订单提供 10% 的折扣。我正在实现这一目标。对于下一步,我正在寻找一种通过functions.php 通过action/hook 以编程方式应用优惠券代码的方法。
看来我可以使用函数 woocommerce_ajax_apply_coupon 来执行此操作(http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html),但我不确定如何使用它。
到目前为止,我已经修改了 cart.php 以获得购物车中所有产品的总重量,我已经创建了一个应用折扣的优惠券(如果手动输入),我已经向 functions.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();
}
}