0

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

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

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

4

1 回答 1

0

您是否有任何机会根本没有该查询的任何结果?

您是否连接到 WordPress 查询以确保 WordPress 正确理解查询(WordPress 可能会在指定的年份和月份内尝试查找带有“我的档案”的页面 - 并且当它不能时)显示 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_yearandmy_monthnum查询变量而不是yearand month

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

于 2013-10-29T23:38:02.140 回答