我正在建立一个杂志网站issue
自定义帖子类型。每个版本的slug遵循以下格式YYYY-MM-DD
根据该期的出版日期。目前,永久链接设置为http://host/magazine/2014-06-08
但我想通过URL访问它们http://host/magazine/2014/06/08
.
以下是我目前在functions.php
:
$issue_structure = \'/magazine/%issue%\';
$wp_rewrite->add_rewrite_tag("%issue%", \'(\\d{4}-\\d{2}-\\d{2})\', "issue=");
$wp_rewrite->add_permastruct(\'issue\', $issue_structure, false);
我尝试将此添加到我的。htaccess文件:
RewriteRule ^magazine/(\\d{4})/(\\d{2})/(\\d{2}) /magazine/$1-$2-$3 [QSA,L]
我还尝试将此添加到我的WP\\U重写规则中:
add_rewrite_rule(\'magazine/(\\d{4})/(\\d{2})/(\\d{2})\', \'magazine/$matches[1]-$matches[2]-$matches[3]\', \'top\');
这两种方法都不起作用,无论是单独使用还是组合使用。我很小心地刷新了我的重写规则。事实上,没有证据表明add_rewrite_rule
呼叫我的Rewrite Rules Inspector 列表,所以我怀疑我没有正确使用它。
我尝试的另一个(黑客)方法是手动调整post_name
数据库中的字段2014/06/08
并将重写标记切换为$wp_rewrite->add_rewrite_tag("%issue%", \'(\\d{4}/\\d{2}/\\d{2})\', "issue=");
但这也没用。
我还应该尝试什么?
最合适的回答,由SO网友:Milo 整理而成
内部重写规则必须指向index.php
并为WordPress设置适当的查询变量,以便能够加载请求的对象:
add_rewrite_rule(
\'magazine/(\\d{4})/(\\d{2})/(\\d{2})/?\',
\'index.php?issue=$matches[1]-$matches[2]-$matches[3]\',
\'top\'
);
这应该能够正确解决传入请求,然而,这仅仅是任务的一半。如果你打电话
the_permalink
对于您的帖子,您仍然可以获得注册帖子类型时定义的格式。要解决这个问题,你必须进行过滤
post_type_link
以正确的格式输出URL。