在设置查询后从url中删除查询参数

时间:2020-10-04 作者:Boyzen

我制作了从特定脚本到wordpress的迁移插件,但在将旧URL重定向到新URL时遇到了问题

旧URL类似book.php?view=12a34b56我想把它重定向到book/12a34b56

我试着通过这样的add\\u rewrite\\u规则

init function >
add_rewrite_rule(
    \'^book.php\\?view=([^&]*)&?\',
    \'index.php?name=$matches[1]\',
    \'top\'
);
但是重写规则不检测查询参数我不知道为什么,所以我将方法改为

query_vars function >
        array_push($vars, \'view\');

pre_get_posts function >
        if (!is_admin() && is_main_query() && get_query_var(\'pagename\') === \'book.php\' && get_query_var(\'view\') != \'\') {
            $query->set(\'name\', get_query_var(\'view\'));

            // after redirect to new url, view arg not removed
            // new url be like this book/12a34b56/?view=12a34b56
            // i try to remove view arg in url after set query but it\'s still not removed
            $query->set(\'view\', false);
            set_query_var(\'view\', false);
            unset($_GET[\'view\']);
        }
这个方法工作得很好,但我仍然有一个问题,就像我在代码注释中所说的新url一样book/12a34b56/?view=12a34b56,如何删除?view=12a34b56 设置帖子名称后,或者在add_rewrite_规则上检测查询参数的方法将非常好。

NOTE : i do not want edit .htaccess directly

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

它不适用于add_rewrite_rule() 因为?view= URL中的部分(它是函数的第一个参数)-即WordPress带出查询字符串部分,因此当WordPress找到匹配的重写规则时,它不包括在内。

如何删除?view=12a34b56 设置职位名称后

你不能(不是在same page), 因为这是请求URL中的一个查询字符串,PHP在加载页面时从中读取,而浏览器已经;“放置”;地址栏中的URL。

但因为我相信您需要301(永久)重定向,从而更改浏览器地址栏中的URL,那么您可以通过parse_request 挂钩-您也可以使用init 挂钩,但带有parse_request, WordPress已经解析了请求路径(例如。https://example.com/this-path/), 因此,我们可以简单地从解析的数据中读取,即$wp->request 在下面

所以这应该对你有用,但一定要删除它pre_get_posts 文件中的代码:

add_action( \'parse_request\', \'wpse_375940\' );
function wpse_375940( $wp ) {
    if ( \'book.php\' === $wp->request &&
        ! empty( $_GET[\'view\'] )
    ) {
        $query = new WP_Query( [
            \'name\'   => $_GET[\'view\'],
            \'fields\' => \'ids\',
        ] );

        if ( ! empty( $query->posts ) &&
            $url = get_permalink( $query->posts[0] )
        ) {
            // Or use 302. It\'s up to you to decide.
            wp_redirect( $url, 301 );
            exit;
        }
    }
}

相关推荐

有人知道如何将一个完整的jQuery插件插入到WordPress元素页面中吗?

我尝试在一个wp页面中实现一个jquery插件,该页面显示在elementor页面上。这里是the link 到插件。What I have tried so far:1. 我通过插件加载了jquery文件(通过functions.php它不起作用)-&燃气轮机;头部载荷:https://1drv.ms/u/s!AikSNhBAk4tevjHlEeV67BifIivC我不确定路径是否正确,是否有必要在wordpress上使用它2. 我插入了html和css(这是最简单的部分)3. 我插入(+将“$”替换为