如何从当前页面URL中删除查询字符串?

时间:2020-07-28 作者:Zian Tap Chan

在页面加载时,我想从当前URL中删除特定的查询字符串,这可能吗?是否有特定的功能?

有一个函数remove_query_arg(\'query_key\');template_redirect, 我想我可以用它们,比如。

function abc_redirections() {
    $url = "https://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'REQUEST_URI\'];
    if (isset($_GET[\'query_string\'])){
        if(empty($_GET[\'query_string\']) || !is_numeric($_GET[\'query_string\']) || $_GET[\'query_string\'] < 1){
            $url = remove_query_arg(\'query_string\', $url);
        }
    }
    if (isset($_GET[\'query_string_1\'])){
        if(empty($_GET[\'query_string_1\']) || !is_numeric($_GET[\'query_string_1\']) || $_GET[\'query_string_1\'] < 1){
            $url = remove_query_arg(\'query_string_1\', $url);
        }
    }
    
    if(isset($_GET[\'query_string_1\']) || isset($_GET[\'query_string_1\'])){
        wp_redirect($url);
        exit;
    }
}
add_action( \'template_redirect\', \'abc_redirections\' );
但这行不通,页面上说;页面不工作,重定向您的次数太多"E;。这种情况有些不对劲。此外,我不确定这是否是获取当前页面URL的正确方法。还有一件事,穿上它不是太糟糕了吗template_redirect? 我的意思是,页面已经被抓取,如果满足条件,它会再次重定向,对我来说感觉不干净。

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

你不需要 $url = "https://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'REQUEST_URI\']; 获取当前URL以删除查询字符串。

你只需要remove_query_arg(\'the_query\', false). False,表示它将使用当前URL,您的代码可以缩短为:

function abc_redirections(){
    if(isset($_GET[\'query_string\']) || isset($_GET[\'query_string_1\'])){
        $array = array();
        if(isset($_GET[\'query_string\']) && (empty($_GET[\'query_string\']) || !is_numeric($_GET[\'query_string\']) || (is_numeric($_GET[\'query_string\']) && $_GET[\'query_string\'] < 1))){
            $array[] = "query_string";
        }
        
        if(isset($_GET[\'query_string_1\']) && (empty($_GET[\'query_string_1\']) || !is_numeric($_GET[\'query_string_1\']) || (is_numeric($_GET[\'query_string_1\']) && $_GET[\'query_string_1\'] < 1))){
            $array[] = "query_string_1";
        }

        wp_redirect(remove_query_arg($array, false));
    }
}
而且,你是对的。使用当前方法,页面将变慢,因为它将加载两次。