重写现有页面的url,不带flush_rewrite_rules

时间:2019-10-15 作者:Howard

我用slug创建了页面test123test234 在wordpress中,我想创建一个插件,执行以下操作

当用户请求时test123, 以及test234 将被送达我知道我可以使用重写API,但无需flush_rewrite_rules? 也就是说,不在数据库中设置规则?

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

如果你想重写example.com/test123 (标准WordPress页面)至example.com/test234 (另一个标准WordPress页面)无需在数据库中保存重写规则,那么一个选项是使用request 过滤器挂钩:

add_filter( \'request\', function ( $query_vars ) {
    if ( isset( $query_vars[\'pagename\'] ) ) {
        $slug = $query_vars[\'pagename\'];

        // Define a list of source and target Page slugs.
        $mapping = [
            \'test123\' => \'test234\',
            \'test567\' => \'foo-bar\',
            //...
        ];

        // If the requested slug is in the mapping list, change the requested page slug.
        if ( ! empty( $mapping[ $slug ] ) ) {
            $query_vars[\'pagename\'] = $mapping[ $slug ];
        }
    }
    return $query_vars;
} );
您还可以使用parse_request 动作挂钩,但上面的内容应该可以,所以我不包括该动作挂钩的代码。

但是,无论您使用过滤器挂钩还是操作挂钩,窍门都是在内部更改请求的页面slug,前提是它与映射列表/数组中的源slug匹配。这样,请求(或访问)example.com/test123 本质上与请求相同example.com/test234 其中HTTP头和页眉、内容、页脚等是相同的。

相关推荐