【发布时间】:2020-09-21 04:55:54
【问题描述】:
在 WooCommerce 中,我将 OUTLET 类别用于销售产品,我想为购买任何“Outlet”产品的客户设置最低小计(30 欧元)。
我尝试将woocommerce_after_calculate_totals 连接到:
- 检查特定产品类别的购物车项目
- 找到特定产品类别且订单低于 30 欧元时显示通知
- 并最终在用户尝试以低于 30 欧元的订单结账时重定向到购物车页面。
这是我的代码:
add_action( 'woocommerce_after_calculate_totals', 'check_order_outlet_items', 10, 0 );
function check_order_outlet_items() {
global $woocommerce;
if (is_cart() || is_checkout()) {
// Check if cart contains items in Outlet cat.
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
$product_id = $values['product_id'];
$terms = get_the_terms( $product_id, 'product_cat' );
foreach ($terms as $term) {
if ($term->name == "OUTLET") {
$outlet_found = 1;
break;
}
}
if ($outlet_found) {break;}
}
if ($outlet_found) {
// Calculate order amount including discount
$cart_subtotal = $woocommerce->cart->subtotal;
$discount_excl_tax_total = $woocommerce->cart->get_cart_discount_total();
$discount_tax_total = $woocommerce->cart->get_cart_discount_tax_total();
$discount_total = $discount_excl_tax_total + $discount_tax_total;
$order_net_amount = $cart_subtotal - $discount_total;
// Check if condition met
if ($order_net_amount < 30) {
if (is_checkout()) {
wp_redirect(WC()->cart->get_cart_url());
exit();
} else {
wc_add_notice( __( 'You must order at least 30 €', 'error' ) );
}
}
}
}
}
此代码在购物车页面中完美运行(如果购物车的金额
但是,如果我去结帐页面的金额 >= 30,然后添加优惠券(将购物车金额降低到 30 以下),那么 Ajax 重新计算总计循环并且页面被阻止。但是,如果我重新加载结帐页面,我会正确地重定向到购物车页面。
【问题讨论】:
标签: php wordpress woocommerce cart taxonomy-terms