wordpress url重写规则产生404错误

时间:2014-01-03 21:57:23

标签: wordpress

我正在处理一个主题,其中重写规则似乎有404错误。规则如下:

products/([^/]+)/page/?([0-9]{1,})/?$

index.php?portfolio=$matches[1]&paged=$matches[2]

首页显示并显示正常,但分页的网址请求看起来不正确:

http://www.site.com/products/page/2

我认为,根据重写规则,它应该如下所示:

http://www.site.com/products/foo/page/2

所以我正在解决foo。它似乎是([^/]+)缺少的级别/字符串,我认为它是某种PCRE / preg_match,正如所指出的here,我对此知之甚少。据我所知,它意味着:

  

启动子模式> 启动字符类定义> 断言   主题的开始(或线,在多线模式下)>没有线索> 结束   字符类定义> 1个或多个量词> 结束   子模式

更新

这与我设计的主题无关。我使用Rewrite Rules Inspector来查找重写规则问题。

问题在于与图库短代码的分页链接。短代码在网站的主页面上工作,但是当它在不同的页面上调用(即/ products页面),然后你尝试访问下一页时,你会得到一个404.当固定链接设置为默认值时,它可以正常工作。这就是为什么我认为问题在于重写规则。

解决方案:

在深入了解插件并修改自己的重写行为后,我意识到该插件没有创建重写规则来处理组合页面的分页。所以,我自己创建了一个并用mu-plugin实现了它,然后通过电子邮件发送插件作者。

add_action( 'init', 'addMyRules' );

function addMyRules(){
    add_rewrite_rule('(.+?)/page/?([0-9]{1,})/?$','index.php?pagename=$matches[1]&paged=$matches[2]','top');
}

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

我会使用this WordPress rewrite analyzer plugin来查看匹配的规则。它说它过时了,但插件开发者(Jan Fabry)非常有才华。几个月前,它仍在使用,上次我使用它。

WordPress保留了一系列重写规则(我忘记了在哪里找到它,可能在$wp_rewrite全局或其他东西上。上面的插件可以帮助您匹配这些。

您是如何生成分页链接的?您的问题可能是您的分页链接生成不正确,而不是重写规则不起作用?换句话说,如果您使用paginate_links()函数生成这些链接,则可能无法生成它们以匹配您的重写规则。尝试直接输入您的*/foo/*网址。

另外,请记住,只要对其进行更改,就需要刷新重写规则。您可以访问设置> /wp-admin/后端的固定链接页面(您可能需要在此页面上提交表单以重新保存永久链接设置,但我听说这不是必需的。)

据我所知,重写分析器应该能够准确地将您的网址与您创建的重写规则进行匹配。只要确保在进行更改时刷新重写规则。

RE:更新

您有两种选择:让您的重写规则与现有的图库分页链接相匹配,或者使图库分页链接与您现有的重写规则相匹配。

要执行后者,您需要查找图库短代码。在wp-content文件夹中搜索add_shortcode(功能,您将找到定义图库短代码的位置。然后,进入并更改the paginate_links() function。它需要各种参数来影响链接的格式化。