将日期层次结构重写为‘yyyy-mm-dd’辅助文件

时间:2014-06-08 作者:Dan Phiffer

我正在建立一个杂志网站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="); 但这也没用。

我还应该尝试什么?

1 个回复
最合适的回答,由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。

结束

相关推荐

Updating URLs in many posts

我将我的WP内容复制到另一台服务器上的新安装中,因此现在我上载的PDF文档具有旧的URL。有没有一种简单的方法可以在我所有的帖子中一次解决这个问题,也许可以使用SQL或一些插件?