是的,在WordPress请求生命周期中有一些点为您提供了钩子,可以修改请求和其他可用参数,稍后将介绍更多内容。
考虑因素
如您所知,您可以修改超全局变量,但这样做可能会在应用程序中引入意外行为,尤其是当您在应用程序的一个区域中对键值对执行清理/验证,但随后在应用程序的另一个区域中使用不同的超全局变量访问键值对时,无论是在您的控制下,还是在其他插件(或主题)的控制下。
例如,您可以执行以下操作:
// assume value of: $_POST[\'something\'] → cats
$_POST[\'something\'] = str_replace(\'cats\', \'dogs\', $_POST[\'something\']);
而其他人做到了:
// value is now: $_POST[\'something\'] → dogs
echo $_REQUEST[\'something\']; // → cats
如果其他人(或您)无意中使用
$_REQUEST
而不是
$_POST
, 如果你没有改变两个超全局,你可以期待不同的结果。
建议我建议您通过确定以下内容来改变修改数据的方法:
您的实际用例是什么?谁需要使用数据(您只需要和或其他插件/主题)
确定一个逻辑入口点,以便其他人可以访问该数据这里有一个(人为的)示例:function someone_else_interfere_with_things( $data ) {
return \'megaladons\';
}
add_filter( \'interfere_with_things\', \'someone_else_interfere_with_things\', 10 );
function interfere_with_things() {
// ... do sanity checks here
$data = isset( $_POST[\'something\'] ) ? $_POST[\'something\'] : \'default\';
$data = apply_filters( \'interfere_with_things\', str_replace( \'cats\', \'dogs\', $data ) );
echo $data; // megaladons!!!
}
add_action( \'init\', \'interfere_with_things\', 1 );
其他插件/主题或您自己代码中的其他地方,则依赖自定义过滤器interfere_with_things
这里有一个共同的理解,即此时其他代码可以期望在一致的准备状态下修改值。如果其他人离开并从超球体中取出东西,那就在他们身上了。
替代钩子init
如果您仍然在请求生命周期的早期修改全局变量,那么您可能需要考虑其他挂钩,例如:plugins_loaded
after_setup_theme
request
parse_request
除其他外所有这些都是在init
.