Я несколько дней чесал голову, но не могу понять порядок действий WordPress между add_filters и get_query_vars.
Контекст:
- Я хочу отправить запрос WP_queryсоответствующие значения для поля выбора HTML.
- Я передаю параметр в URL, чтобы узнать, как мне нужно фильтровать
- Сначала я объявляю свои переменные в WP (functions.php):
function add_query_vars_filter( $vars ){
$vars[] = "page_id_po";
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter', 5);
- Когда я добавляю второй фильтр и пытаюсь получить переменную URL, в результате я всегда получаю нулевое значение (позже в functions.php).
function my_post_object_query( $args, $field, $post_id ) {
$page_id = get_query_var('page_id_po'); // Returns no value
$report_related_company_obj = get_field('field_5ba4c9d0c8168', $page_id);
$page_id = $report_related_company_obj->ID;
$args = array(
'post_type' => 'tableau_viz',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'company',
'value' => $page_id,
),
),
);
return $args;
}
add_filter('acf/fields/post_object/query/key=field_5bba22da1d8b5',
'my_post_object_query', 11);
Проблема не связана с тем, что переменная не найдена в URL, потому что, если я вызываю функцию 'my_post_object_query' прямо в моем custom-template.php, как это:
$company_id = my_post_object_query();
var_dump($company_id);
Я получаю правильные аргументы, и get_query_var дает мне правильный результат (упрощенный вывод):
array(3) { [...] "company" ["value"]=> int(771) } } } ;
Кажется, проблема в том, что get_query_var вызывается только после моего filer / запроса.Я попытался добавить свой фильтр на более позднем этапе, например так:
add_action('wp_loaded',
add_action_adr('acf/fields/post_object/query/key=field_5bba22da1d8b5',
'my_post_object_query',10,3));
function add_action_adr($tag, $function_to_add, $priority = 10,
$accepted_args = 1) {
return add_filter('acf/fields/post_object/query/key=field_5bba22da1d8b5',
'my_post_object_query',10,3);
}
Однако это add_action на более позднем этапе также не работает.Спасибо за вашу помощь.