You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
I'm filtering the rules matching via the acf/location/rule_match filter. This is working successfully when loading an existing post. Unfortunately this filter is not called when a user selects a category, which fires the acf/ajax/check_screen request.
To Reproduce
Steps to reproduce the behavior:
Create any rule based on a taxonomy ( WooCommerce product category )
Create a new product
Select any category > ajax is fired to check for applicable field sets.
Applicable rules are not populated.
This is the filter function I'm using (working for existing products) - minimal version below.
/** * Filter ACF location rules to show fields for products in the subcategories of rule category. * * @param bool $match Whether the rule matches or not. * @param array $rule The ACF location rule. * @param array $options Additional options for the rule. * @return bool Whether the rule matches or not. */functioncustomize_acf_location_rules($match, $rule) {
if (!is_admin() || !isset($rule['value'])) {
return$match;
}
$match_cats = ['guns', 'gas', 'magazines'];
foreach ($match_catsas$match_cat) {
$target_rule = 'product_cat:' . $match_cat;
// editing a product?if (defined('DOING_AJAX') && DOING_AJAX) {
$is_correct_page = isset($_REQUEST['action']) && $_REQUEST['action'] = 'acf/ajax/check_screen';
} else {
$is_correct_page = isset($_REQUEST['post_type']) && $_REQUEST['post_type'] == 'product';
}
// include subcategories of ACF ruleif ($rule['value'] === $target_rule && $is_correct_page) {
$product_categories = wp_get_post_terms(get_the_ID(), 'product_cat', ['fields' => 'ids']);
$focus_category = get_term_by('slug', $match_cat, 'product_cat');
if ($focus_category) {
$ancestor_category = $focus_category->term_id;
$child_categories = get_term_children($ancestor_category, 'product_cat');
if (in_array($ancestor_category, $product_categories) || array_intersect($product_categories, $child_categories)) {
returntrue;
}
}
}
}
return$match;
}
add_filter('acf/location/rule_match', 'customize_acf_location_rules', 10, 2);
For testing, this should supposedly stop the ajax request, showing the filter is not being called for ajax requests.
functioncustomize_acf_location_rules($match, $rule) {
// Exiting here should prevent the ajax request returning valid JSON, It doesn't
exit;
}
add_filter('acf/location/rule_match', 'customize_acf_location_rules', 10, 2);
Expected behavior
I would expect ajax requests to determine which field groups are applicable would be filtered through acf/location/rule_match. If this is intentional, I would appreciate an alternate method to filter the applicable field groups via Ajax
Describe the bug
I'm filtering the rules matching via the
acf/location/rule_match
filter. This is working successfully when loading an existing post. Unfortunately this filter is not called when a user selects a category, which fires theacf/ajax/check_screen
request.To Reproduce
Steps to reproduce the behavior:
This is the filter function I'm using (working for existing products) - minimal version below.
For testing, this should supposedly stop the ajax request, showing the filter is not being called for ajax requests.
Expected behavior
I would expect ajax requests to determine which field groups are applicable would be filtered through
acf/location/rule_match
. If this is intentional, I would appreciate an alternate method to filter the applicable field groups via AjaxCode
acf-export-2023-11-19.json
Version Information:
The text was updated successfully, but these errors were encountered: