我在尝试添加重写规则时遇到了一个奇怪的问题。
首先,关于我的设置的说明。我正在使用date.php文件进行网站上的其他特定设置。
我遇到问题的区域是自定义档案页面。 为了不弄乱date.php模板,我尝试在wordpress中设置一个新页面,然后创建自己的模板来显示档案。
为了捕获带有日期的url而不是重定向到date.php我设置了以下add_rewrite_rules:
function my_archives() {
add_rewrite_rule("my-archives/([0-9]{4})/([0-9]{1,2})/page/([0-9]{1,})/?$", 'index.php?pagename=my-archives&year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]', 'top');
add_rewrite_rule("my-archives/([0-9]{4})/([0-9]{1,2})/?$", 'index.php?pagename=my-archives&year=$matches[1]&monthnum=$matches[2]', 'top');
}
add_action('init', 'my_archives');
我认为一切都很好,因为我的链接工作正常。 例: http://mysite.com/my-archives/2013/09/ 以及 http://mysite.com/my-archives/2013/09/page/2/ 对于分页结果。
现在一个月后,我发现由于某种原因,它只能正确地重定向到当前日期后一个月的日期。 因此,当前日期是2013/10 /它仅重定向/ 2013/09 /并且其他所有内容都被重定向到404页面。
有关此可能原因的任何建议,或者如果有人在我的代码中看到某些不正确的内容,我们将不胜感激。
答案 0 :(得分:0)
你有没有机会对该查询没有任何结果?
您是否正在使用WordPress查询以确保WordPress正确理解查询(WordPress可能正在尝试在指定的年份和月份内找到带有“my-archives”的页面 - 并且它可以它显示404错误。
尝试执行以下操作:
var_dump( get_posts( 'pagename=my-archives&year=2013&monthnum=10' ) );
并查看是否返回任何结果。如果没有 - 那么这很可能是你的问题。
为了解决这个问题,我建议您将重写规则更改为:
add_rewrite_rule("my-archives/([0-9]{4})/([0-9]{1,2})/?$", 'index.php?pagename=my-archives&my_year=$matches[1]&my_monthnum=$matches[2]', 'top');
因为我假设如果您没有连接到主WordPress查询,那么您正在自定义页面模板上执行查询。在那里,您应该查找my_year
和my_monthnum
个查询变量,而不是year
和month
。
请记住,实际修改主WordPress查询(在parse_request
上(通过$wp
对象而不是$wp_query
)或pre_get_posts
操作(通过$wp_query
对象))可能是更好的解决方案。