几天来,我一直在挠头,但无法理解WordPress在add_filters和get_query_vars之间遵循的操作顺序。
上下文:
function add_query_vars_filter( $vars ){
$vars[] = "page_id_po";
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter', 5);
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中找不到变量无关,因为如果我直接在custom-template.php中像这样调用函数“ my_post_object_query”:
$company_id = my_post_object_query();
var_dump($company_id);
我得到正确的参数,而get_query_var给我正确的结果(简化的输出):
array(3) { [...] "company" ["value"]=> int(771) } } } ;
问题似乎是只有在我的文件管理器/查询之后才调用get_query_var。 我试图在以后的阶段添加过滤器,如下所示:
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也不起作用。 谢谢您的帮助。