也许我没有很好地理解这一点,但如果你需要删除\'foo\'
from查询变量的使用不会简单得多\'request\'
过滤并删除var?
所需代码:
add_filter(\'request\', function($query_vars) {
return array_diff_key($query_vars, array(\'foo\'=>\'\'));
});
信息技术:
仅在主查询上运行删除的var$wp
对象在设置查询之前动作$wp_query
, 因此,无需从那里删除查询不会影响所有其他变量编辑:此代码的一个问题是它运行得很早,因此很难捕捉到查询变量的存在并根据其存在/值执行操作。
解决方案可以是在相同的条件下运行\'request\'
过滤器,就在删除查询变量之前(例如,使用优先级更高的同一挂钩)。
另一种解决方案可能是在$wp
对象:
add_filter(\'request\', function($query_vars) {
$GLOBALS[\'wp\']->_foo = isset($query_vars[\'foo\']) ? $query_vars[\'foo\'] : false;
return array_diff_key($query_vars, array(\'foo\'=>\'\'));
});
之后,就可以在之后激发的任何挂钩中检查“foo”变量
\'request\'
, 最早的是
\'parse_request\'
add_action(\'parse_request\', function($wp) {
$foo = $wp->_foo;
// do something with foo
});
最后一个是
\'shutdown\'
:
add_action(\'shutdown\', function() {
$foo = $GLOBALS[\'wp\']->_foo;
// do something with foo
});