即使存在查询字符串参数,Query_vars过滤器也不起作用

时间:2016-10-20 作者:The Unknown Dev

我正在添加一个新的查询字符串参数以传递到URL中,以便可以操纵REST API响应。

我将此添加到functions.php

add_filter(\'query_vars\', function ($vars) {
        $vars[] = \'xyz\';
        return $vars;
});
这将使参数xyz 在WP\\U查询对象中可用,但不可用。

add_filter(\'pre_get_posts\', function ($query) {
  var_dump($query->query_vars);die;
});
Thexyz 属性在中不可用query_vars 但是,如果我转储PHP$\\u GET数组,它就在那里,并且有我传入的值,所以我不知道为什么它不能进入query_vars. 有什么想法吗?

2 个回复
SO网友:Andy Macaulay-Brook

我不确定它是否能像那样工作。尝试检查$query->public_query_vars 相反,我想你会看到它添加在那里。

我通常是这样使用的:

add_filter( \'query_vars\', \'add_test_query_vars\');

function add_test_query_vars($vars){
    $vars[] = "test";
    return $vars;
}
因此,与您相同,但有一个命名函数。

然后添加一个重写端点:

function wpse_243396_endpoint() {
    add_rewrite_endpoint( \'test\', EP_PERMALINK );
}

add_action( \'init\', \'wpse_243396_endpoint\' );
然后URL结束/test/ 设置我测试的查询变量,如下所示:

global $wp_query;    
if( isset( $wp_query->query[\'test\'] ) ) { }

SO网友:admcfajn

我认为只有在尝试预览url时将get参数添加到url中(或者使用$query->set() )

尝试添加?xyz=hello-world 到您要测试的url的末尾(&A);你应该看看hello-world 在垃圾场。

这也将取决于你在哪里倾倒。。。也许可以试试这个:

add_filter(\'query_vars\', function ($vars) {
        $vars[] = \'xyz\';
        return $vars;
});
然后访问:yoursite.com/?xyz=hello-world

function trythis( $wp_query ) {
    if ( $wp_query->is_main_query() && ! is_admin() ) {
        var_dump( $wp_query ); 
        exit;
    }
}
add_action( \'pre_get_posts\', \'trythis\' );
&;你应该看看\'xyz\'=>\'hello-world\' 在垃圾场。我认为查询变量不会添加到wp查询中,除非它们需要添加,否则会增加不必要的膨胀。

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {