如何在Wordpress的add_filter()中使用get_query_vars()?

时间:2018-10-15 14:18:23

标签: wordpress get advanced-custom-fields add-filter

几天来,我一直在挠头,但无法理解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变量时,结果我总是为null(后来在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中找不到变量无关,因为如果我直接在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也不起作用。 谢谢您的帮助。

0 个答案:

没有答案