我正在使用一个特定的支付网关,它在其支付响应中包含参数“name”。我知道这是reserved term 这是不应该使用的。不幸的是,我无法控制发布的数据。
我生成了以下函数,它重命名“name”参数,然后重定向到请求的页面(而不是显示404)。
function redirect() {
if ( is_404() && isset($_GET[\'name\']) && isset($_GET[\'instId\']) ) {
parse_str($_SERVER[\'QUERY_STRING\'], $params);
$params[\'fullname\'] = $params[\'name\'];
unset($params[\'name\']);
$protocol = stripos($_SERVER[\'SERVER_PROTOCOL\'],\'https\') === true ? \'https://\' : \'http://\';
$location = $_SERVER[\'HTTP_HOST\'].strtok($_SERVER["REQUEST_URI"],\'?\').\'?\'.http_build_query($params);
wp_redirect( $protocol.$location ); exit;
}
}
add_action(\'template_redirect\', \'redirect\');
但是,如果“name”参数的值与现有页面或帖子标题(部分)匹配,则Wordpress会在“我的功能”运行之前重定向到页面/帖子。我尝试了各种各样的操作来让函数更早地运行,但没有效果——有没有办法避免不希望的副作用?
最合适的回答,由SO网友:TheDeadMedic 整理而成
实际上,我会建议另一种方法-首先删除导致重定向的函数:
function wpse_227033_disable_name_redirect() {
if ( is_404() && isset( $_GET[\'name\'], $_GET[\'instID\'] ) )
remove_action( \'template_redirect\', \'redirect_canonical\' );
}
add_action( \'wp\', \'wpse_227033_disable_name_redirect\' );
我用过
wp
几乎就在之前
template_redirect
. 请记住,测试前需要清除浏览器缓存(这些重定向是
301
\'s) 。