当Value为页面/帖子标题时,防止在$_POST中保留项‘name’时重定向到页面/页面

时间:2016-05-18 作者:mistertaylor

我正在使用一个特定的支付网关,它在其支付响应中包含参数“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会在“我的功能”运行之前重定向到页面/帖子。我尝试了各种各样的操作来让函数更早地运行,但没有效果——有没有办法避免不希望的副作用?

1 个回复
最合适的回答,由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) 。

相关推荐

Redirect htaccess

我需要帮助重定向我的页面。例如,我有网站https://example.com. 我需要将内容从https://example.com 到https://example.com/blog. 这不是问题,我通过更改主页URL来做到这一点。这很有效。但现在我需要添加来自旧的重定向https://example.com 到https://xmpl.com.我想用。htaccess,但这不起作用。你们能帮帮我吗?以下是我对此的一些尝试,但两者都不起作用。RewriteEngine On RewriteRu