Rewrite query var on postname

时间:2019-02-27 作者:Jesper

我正在尝试重写,以便查询变量看起来很漂亮:

这是我现在得到的URL结构:

example.com/post-type-archive/post-name/?subpage=about
这就是我想要的:

example.com/post-type-archive/post-name/about
请注意post_name 正在根据您所在的站点进行更改。到目前为止,我找到的所有答案都没有考虑到这一点。

这是我当前的代码:

add_filter( \'query_vars\', function($vars) {
    $vars[] = \'subpage\';
    return $vars;
});
add_action(\'init\', function() {
    add_rewrite_tag(\'%subpage%\', \'([^/]+)\');
    add_rewrite_rule(\'[^post-type-archive/]([^/]+)\',\'index.php?name=$matches[1]&subpage=$matches[2]\',\'top\');
});
这使得页面返回404页未找到页面。

是的。。。每次修改后,我都刷新了重写规则。

编辑我通过使用以下命令使其工作:

add_action( \'init\', function() {
    add_rewrite_tag(\'%subpage\', \'([^&]+)\');
    add_rewrite_rule(
        \'^post-type-archive/([^/]*)/([^/]*)/?\',
        \'index.php?post_type=post-type-archive&name=$matches[1]&subpage=$matches[2]\',
        \'top\'
    );
});
现在唯一的问题是分页不再适用post-type-archive.

1 个回复
SO网友:Jacob Peattie

所以,首先,我认为在这种情况下不需要重写标记,所以可以忽略它。

我认为,剩下的代码的问题是,重写规则只捕获了1个匹配项(因为只有一组()), 所以subpage 没有收到值此外,您的规则似乎将您的帖子类型排除在外(因为^)<实际上,它似乎排除了任何帖子名称以任何字母开头的URLp,o,s,t,_,t,y,p,e.

我认为你的重写规则应该是:

add_rewrite_rule( \'post_type/([^/]+)/([^/]+)/?\', \'index.php?name=$matches[1]&subpage=$matches[2]\', \'top\' );
然后,您只需要确保在模板中正确访问子页面值。$_GET[\'subpage\'] 将不再工作。相反,您需要使用get_query_var( \'subpage\' ).

还要确保重新保存永久链接设置。

相关推荐