筛选的Query_vars成为全局的。为什么这会奏效?

时间:2017-04-19 作者:Joel Stransky

由于某些不太清楚的原因,当我添加自定义query\\u vars时,它们在任何地方都可用,无需访问器,如globalget_query_var()

// if your url contains the var http://example.com?document_id=99
// and you add it to $query_vars...
<?php
function filter__query_vars( $query_vars ) {
  $query_vars[] = \'document_id\';
  return $query_vars;
}
add_filter( \'query_vars\', \'filter__query_vars\' );

// you can reference it anywhere.
/* single.php */
<?php
echo $document_id; // outputs 99. wtf?
为什么会这样?

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

WP::parse_request() 方法(src) 我们找到了query_vars 过滤器:

$this->public_query_vars = apply_filters( \'query_vars\', $this->public_query_vars );
和内部WP::register_globals() 我们可以看到why 它可以在全球范围内访问(src):

// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
    $GLOBALS[ $key ] = $value;
}
全球$Wp_query 已从全局$wp 对象

相关推荐

apply_filters() function

我用过apply_filters() 从WordPress帖子中检索内容时,如:$content=$query_val->post_content; $content = apply_filters( \'the_content\', $content ); 当我使用apply_filters() 这个apostrophe( \' ) 在我的文本中显示了一些字符。在我移除后apply_filters() 它显示正确。所以请解释清楚!!它在做什么?我已引用此链接Referal_lin