我正在尝试重写,以便查询变量看起来很漂亮:
这是我现在得到的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
.
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\' )
.
还要确保重新保存永久链接设置。