显示通过自定义GET查询字符串生成的文本

时间:2021-05-25 作者:funkoolow

我试图在我的页面上显示一些文本,通过get查询字符串生成文本,例如调用此url:mysite.com/page/?letter=exampletext

如果我在这种情况下理解正确,则需要;将它们添加到WP\\U query可用的公共查询变量中(此处说明https://developer.wordpress.org/reference/functions/get_query_var/), 因此,我按照说明将以下代码添加到我的页面模板中:

<?php 
function queries( $qvars ) {
    $qvars[] = \'letter\';
    return $qvars;
    }
add_filter( \'query_vars\', \'queries\' );

$text = get_query_var( \'letter\' );
echo "letter is: ".$text;
?>
不幸的是,这并没有像预期的那样工作,因为它只显示字符串的exlicit部分(“letter is:”)。

我错过了什么?谢谢大家

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

You should not use the query var API for that, 使用$_GETfilter_input 相反get_query_var 用于访问main上的参数WP_Query, 不用于检索URL GET参数。将此API用于URL具有误导性,可能会引发许多意外问题。

查询变量API用于重写规则和WP_Query, e、 用于处理自定义永久链接和虚拟页面等。它从来没有打算在这样的模板中检索原始URL参数。

get_query_var 将检索主查询中使用的请求参数的值。该值可能与URL不同,也可能返回一个值,尽管它根本不在URL中。还可以通过以下过滤器对其进行修改和拦截:pre_get_postsparse_request.

另一个例子是,如果我访问/mypage?foo=bar 然后运行以下代码:

query_post(\'s=test\');
echo get_query_var( \'foo\' );
会的not 打印bar, 因为当前主查询不包含foo 查询变量。

至于为什么您的示例不起作用,问题是在加载页面模板时,查询变量过滤器已经运行了!主查询已经运行,它已经获取了您的页面,并且已经决定了要加载的模板。您的筛选器已添加是,但筛选器已运行很久,您的代码正在等待登上已经离开的列车!

通常,动作和过滤器不属于模板,并且几乎总是一个错误的标志,或者用户不理解动作/挂钩/过滤器不是域语言,时间线上的事件是一个更准确的心理模型。add_actionn( \'init\', \'foobar\' )\' 从现在起,如果init 事件发生,呼叫foobar.

不是你做了什么,而是你什么时候做的。将过滤器/操作放入插件或functions.php 相反