How to rewrite url wordpress?

时间:2016-05-25 作者:Igor Fedorov

我正在做WordPress帖子过滤。申请表获得此url后:

http://local/rieltplus/category/catalog/?type=flat&price_min=1000&price_max=2000&area_min=5&area_max=50&room_num=5&etage=2&plan=old
如何像这样重写url:

本地/rieltplus/类别/目录/TYPE&;最小价格=1000(&U);价格\\u max=2000(&U);area\\u min=5(&U);area\\u max=50(&U);房间数量=5(&U);etage=2(&;计划=旧

也就是说,TYPE = 获取get参数类型,然后其他参数保持不变。请帮帮我。。。我不知道怎么做。。。

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

你应该钩住add_rewrite_rule() 进入init

假设http://local/rieltplus/ 是您的主页,并且category/catalog/ 是一类档案,这应该可以:

add_action(\'init\', function() {
    add_rewrite_rule(
        \'category/catalog/([^/]+)?$\',
        \'index.php?category_name=catalog&type=$matches[1]&price_min=1000&price_max=2000&area_min=5&area_max=50&room_num=5&etage=2&plan=old\',
        \'top\'
    );
});
如果你想让任何类别都可以使用它,那么在评论中提及它。

顺便说一句local/rieltplus/category/catalog/TYPE&price_min 不是有效的URL,与local/rieltplus/category/catalog/TYPE?price_minlocal/rieltplus/category/catalog/TYPE/?price_min..

获取type 变量,使用get_query_var( \'type\' ) 但首先将其添加到主查询:

add_filter(\'query_vars\', function($vars) {
    $vars[] = "type";
    return $vars;
});
您应该通过将permalink结构保存在settings > permalinks 屏幕或使用flush_rewrite_rules() 只有一次。

Edit - 根据你在the comments

add_action(\'wp\', function() { // this will work as long as GET type is the first is the query string
    if( "catalog" === get_query_var( "category_name" ) && isset( $_GET["type"] ) ) {
        if( ! empty( $_GET["type"] ) ) {
            $type = strval( $_GET["type"] );
            $url = $_SERVER["REQUEST_URI"];
            $url = str_replace( array( "?type={$type}&", "?type={$type}" ), "{$type}?", $url );
            $url = str_replace( "?&", \'?\', $url );
            wp_redirect( $url );
            exit;
        }
    }
});

相关推荐

Moving Website-URL

我尝试根据the codex (尝试错误的方式后-只需在WordPress设置中更改URL)但现在我做到了,我的主页仍然存在,但我的其余页面不再显示(404)。有什么问题吗?有什么想法吗?提前感谢!