Wordpress add_rewrite_rule

时间:2013-10-29 20:50:57

标签: php wordpress rewrite

我在尝试添加重写规则时遇到了一个奇怪的问题。

首先,关于我的设置的说明。我正在使用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页面。

有关此可能原因的任何建议,或者如果有人在我的代码中看到某些不正确的内容,我们将不胜感激。

1 个答案:

答案 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_yearmy_monthnum个查询变量,而不是yearmonth

请记住,实际修改主WordPress查询(在parse_request上(通过$wp对象而不是$wp_query)或pre_get_posts操作(通过$wp_query对象))可能是更好的解决方案。