You should not use the query var API for that, 使用$_GET
或filter_input
相反get_query_var
用于访问main上的参数WP_Query
, 不用于检索URL GET参数。将此API用于URL具有误导性,可能会引发许多意外问题。
查询变量API用于重写规则和WP_Query
, e、 用于处理自定义永久链接和虚拟页面等。它从来没有打算在这样的模板中检索原始URL参数。
get_query_var
将检索主查询中使用的请求参数的值。该值可能与URL不同,也可能返回一个值,尽管它根本不在URL中。还可以通过以下过滤器对其进行修改和拦截:pre_get_posts
或parse_request
.
另一个例子是,如果我访问/mypage?foo=bar
然后运行以下代码:
query_post(\'s=test\');
echo get_query_var( \'foo\' );
会的
not 打印
bar
, 因为当前主查询不包含
foo
查询变量。
至于为什么您的示例不起作用,问题是在加载页面模板时,查询变量过滤器已经运行了!主查询已经运行,它已经获取了您的页面,并且已经决定了要加载的模板。您的筛选器已添加是,但筛选器已运行很久,您的代码正在等待登上已经离开的列车!
通常,动作和过滤器不属于模板,并且几乎总是一个错误的标志,或者用户不理解动作/挂钩/过滤器不是域语言,时间线上的事件是一个更准确的心理模型。add_actionn( \'init\', \'foobar\' )\'
从现在起,如果init
事件发生,呼叫foobar
.
不是你做了什么,而是你什么时候做的。将过滤器/操作放入插件或functions.php
相反