Php 如果客户在以前的WooCommerce订单中使用过相关优惠券,则限制使用优惠券

Php 如果客户在以前的WooCommerce订单中使用过相关优惠券,则限制使用优惠券,php,wordpress,woocommerce,orders,coupon,Php,Wordpress,Woocommerce,Orders,Coupon,我正在寻找一种方法,以限制优惠券的使用,并显示一个错误消息,如果客户使用相关优惠券在以前的订单之前在WooCommerce 所谓相关优惠券,我的意思是:在购物车/结帐页面上以预定义的数组与当前插入的优惠券一起出现的couponcodes。在此基础上,进行比较 我的代码尝试: add_filter('woocommerce_优惠券有效','specific_优惠券有效',10, 3 ); 功能特定的优惠券有效($is\u valid,$优惠券,$折扣){ $优惠券代码=数组('free10','f

我正在寻找一种方法,以限制优惠券的使用,并显示一个错误消息,如果客户使用相关优惠券在以前的订单之前在WooCommerce

所谓相关优惠券,我的意思是:在购物车/结帐页面上以预定义的数组与当前插入的优惠券一起出现的couponcodes。在此基础上,进行比较

我的代码尝试:

add_filter('woocommerce_优惠券有效','specific_优惠券有效',10,
3 );
功能特定的优惠券有效($is\u valid,$优惠券,$折扣){
$优惠券代码=数组('free10','free20','free30');
$args=数组(
“每页帖子数”=>-1,
'orderby'=>'title',
“订单”=>“asc”,
“post_type”=>“shop_优惠券”,
“发布状态”=>“发布”,
);
$coupons=get_posts($args);
if(在_数组中($coups,$coupon_代码)){
$is_valid=false;
}
return$是有效的;
}

如果客户以前在WooCommerce的订单中使用过相关优惠券,您可以使用:

//比较并返回true或false
功能比较相关优惠券代码($current优惠券代码){
//添加多个优惠券代码进行比较,以逗号分隔
$compare_优惠券_code=数组('coupon1','coupon2','coupon3');
//违约
$valid=true;
//当必须将当前优惠券代码与其他优惠券代码进行比较时
如果(在数组中($current_优惠券代码,$compare_优惠券代码)){
//获取用户ID
$user\u id=get\u current\u user\u id();
//获取WC_客户实例对象
$customer=新的WC\U客户($user\U id);
//计费电子邮件
$email=$customer->get_billing_email();
//循环通过
foreach($优惠券代码与$优惠券代码比较){
//获取WC_优惠券实例对象
$coupon\u obj=新WC\u优惠券($coupon\u代码);
//如果客户已经使用其中一张优惠券
if(数组相交(数组($user\u id,$email),$coupon\u obj->get\u used\u by()){
$valid=false;
打破
}   
}
}
//返回
返回$valid;
}
//有效的
功能过滤器\u商业\u优惠券\u有效($is\u有效,$优惠券,$折扣){
如果(!is_user_logged_in())返回$is_有效;
//获取当前应用的优惠券代码
$current_-coupon_-code=strtolower($coupon->get_-code());
//调用函数,对还是错
返回与优惠券相关的优惠券代码($当前优惠券代码);
}
添加过滤器(“woocommerce优惠券有效”,“过滤器woocommerce优惠券有效”,10,3);
//错误
函数过滤器\u商业\u优惠券\u错误($err,$err\u代码,$优惠券){
如果(!is_user_logged_in())返回$err;
//获取当前应用的优惠券代码
$current_-coupon_-code=strtolower($coupon->get_-code());
//验证,调用函数,true或false
如果(intval($err\u code)==WC\u优惠券::E\u WC\u优惠券无效\u过滤和比较相关优惠券代码($current\u优惠券代码)==false){
$err=uuuuu('My优惠券错误','woocommerce');
}
返回$err;
}
添加过滤器(“woocommerce优惠券错误”,“过滤器woocommerce优惠券错误”,10,3);

通过我的答案中添加的注释标签进行解释

相关的: