Check user based conditions for bxgy discount bar
Verify conditions based on user attributes for a "Buy X Get Y" discount bar.
add_filter('advanced_woo_discount_rules_filter_passed', function($filter_passed, $rule, $product, $sale_badge){
if(is_object($rule)){
$rule_type = $rule->getRuleDiscountType();
$conditions = $rule->getConditions();
$filter_passed_user_logged_in = $user_logged_in_passed = $filter_passed_user_role = $filter_passed_user_list = $user_role_passed = $user_list_passed = $has_other_conditions = false;
$condition_relationship = $rule->getRelationship('condition', 'and');
if(!empty($conditions) && $filter_passed && $rule_type == 'wdr_buy_x_get_y_discount'){
foreach($conditions as $condition){
$cart = array();
$options = isset($condition->options) ? $condition->options : array();
$condition_type = isset($condition->type) ? $condition->type : array();
if( !empty($condition_type) ){
if (!empty($options) && isset($rule->available_conditions[$condition_type]['object']) && is_object($rule->available_conditions[$condition_type]['object']) && method_exists($rule->available_conditions[$condition_type]['object'], 'check')) {
$rule->available_conditions[$condition_type]['object']->rule = $rule;
if( $condition_type == 'user_role'){
$user_role_passed = true;
$filter_passed_user_role = $rule->available_conditions[$condition_type]['object']->check($cart, $options);
}
if( $condition_type == 'user_list'){
$user_list_passed = true;
$filter_passed_user_list = $rule->available_conditions[$condition_type]['object']->check($cart, $options);
}
if( $condition_type == 'user_logged_in'){
$user_logged_in_passed = true;
$filter_passed_user_logged_in = $rule->available_conditions[$condition_type]['object']->check($cart, $options);
}
}
}
if( !empty($condition_type) && !in_array($condition_type, array('user_role', 'user_list', 'user_logged_in'))){
$has_other_conditions = true;
}
}
if($user_role_passed || $user_list_passed || $user_logged_in_passed){
if($filter_passed_user_role || $filter_passed_user_list || $filter_passed_user_logged_in){
if($condition_relationship == 'and'){
if($user_role_passed && $user_logged_in_passed){
if($filter_passed_user_role && $filter_passed_user_logged_in){
}else{
$filter_passed = false;
}
}
if($user_list_passed && $user_logged_in_passed){
if($filter_passed_user_list && $filter_passed_user_logged_in){
}else{
$filter_passed = false;
}
}
}
} else {
if($condition_relationship == 'or'){
if($has_other_conditions){
} else {
$filter_passed = false;
}
} else {
$filter_passed = false;
}
}
}
}
}
return $filter_passed;
}, 11, 4);