如何解决WooCommerce中礼品类的强制兑换券
我正在使用下面的函数,该函数当前接受单个(或数组)静态优惠券代码。我如何更改此设置以使其与网站中存在的任何有效(即未使用最大次数等)优惠券代码一起使用?
add_action( 'woocommerce_check_cart_items','mandatory_coupon_code' );
function mandatory_coupon_code() {
$product_categories = array( 'gifts' ); // Category ID or slug of targeted category
// NEED TO EDIT THIS PART TO GET THE LIST OF VALID CODES
$coupon_code = 'testing1'; // The required coupon code
$coupon_applied = in_array( strtolower($coupon_code),WC()->cart->get_applied_coupons() );
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ){
if( has_term( $product_categories,'product_cat',$cart_item['product_id'] ) && ! $coupon_applied ) {
wc_clear_notices(); // Clear all other notices
// Avoid checkout displaying an error notice
wc_add_notice( sprintf( 'The product "%s" requires a valid redemption code for checkout.',$cart_item['data']->get_name() ),'error' );
break; // stop the loop
}
}
}
编辑:
在this link的评论和信息中,我尝试了下面的代码,但这不起作用:
add_action( 'woocommerce_check_cart_items','mandatory_coupon_code' );
function mandatory_coupon_code() {
$product_categories = array( 'gifts' ); // Category ID or slug of targeted category
$coupon_code = array();
foreach ( $coupons as $coupon ) {
$coupon_name = $coupon->post_title;
array_push( $coupon_code,$coupon_name );
}
$coupon_applied = in_array( strtolower($coupon_code),WC()->cart->get_applied_coupons() );
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ){
if( has_term( $product_categories,$cart_item['product_id'] ) && ! $coupon_applied ) {
wc_clear_notices(); // Clear all other notices
// Avoid checkout displaying an error notice
wc_add_notice( sprintf( 'The product "%s" requires a valid redemption code for checkout.','error' );
break; // stop the loop
}
}
}
解决方法
由于wooCommerce在应用优惠券时已经在检查其有效性,如果无效,它会根据无效原因显示不同的警告消息,并删除无效的优惠券...
因此,您无需在代码中获取所有有效的优惠券……您只需要以下内容:
add_action( 'woocommerce_check_cart_items','mandatory_redemption_coupon_code_for_gifted_items' );
function mandatory_redemption_coupon_code_for_gifted_items() {
$product_categories = array( 'gifts' ); // Term ID,slug or name of targeted category
$applied_coupons = WC()->cart->get_applied_coupons();
// When no coupon has been applied
if( empty($applied_coupons) ) {
// Loop through cart items
foreach ( WC()->cart->get_cart() as $item ){
// Check for gifted items
if( has_term( $product_categories,'product_cat',$item['product_id'] ) ) {
wc_clear_notices(); // Clear all other notices
// Avoid checkout displaying an error notice
wc_add_notice( sprintf( 'The product "%s" requires a valid redemption code for checkout.',$item['data']->get_name() ),'error' );
break; // stop the loop
}
}
}
}
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。
现在,如果需要特定的优惠券,您将进行自定义SQL查询,以检查是否有任何适用的优惠券可以兑换。
注意:在您的“修改”中,缺少优惠券查询,因此这是行不通的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。