我遇到了一个有点奇怪的问题,重写规则没有正确刷新。
我试过使用flush_rewrite_rules();
和flush_rewrite_rules(true);
.
我也尝试过全球化$wp_rewrite
使用$wp_rewrite->flush_rules();
和$wp_rewrite->flush_rules(true);
这两种方法似乎都没有正确刷新重写规则。这些调用在调用时确实刷新了重写规则。我怎么知道的?将解决方案用于debugging rewrite rule flushing.
目前,我已经重写了插件激活和停用的规则。没有问题。
我有一个插件管理设置页面,供用户配置插件。一些设置会调整永久链接结构,因此需要在插件管理设置页面“保存设置”上刷新重写规则。(使用标准update_option();
) 用于保存设置。
我想指出的是,根据指定的设置,将创建自定义帖子类型以匹配用户指定的设置。因此,必须在保存设置后立即刷新重写规则。这就是事情不能正常运作的地方。
上述用于调试重写规则的链接解决方案由提供@toscho
显示它正在刷新大量重写规则。然而,当访问自定义帖子类型的单一项,甚至是自定义帖子类型的存档时,每个都会返回404个错误。
已正确且适当地注册自定义帖子类型。我肯定这不是问题所在。
紧接着插件管理页面设置保存。创建自定义帖子类型,调整permalink结构,并尝试刷新所有重写规则。
然后始终加载自定义帖子类型,并加载到init
就像平常一样。
出于某种原因,重写规则没有正确刷新,因为正如我之前所说的,访问自定义post类型的singular或archive部分会返回404错误。
奇怪的是,如果我只需访问administration permalinks设置页面,然后返回前端查看自定义帖子类型的单数部分或归档部分,它们就会像预期的那样神奇地工作。
What does that administration permalinks settings page do that I\'m not doing that allows the rewrite rules to flush appropriately and mine do not?
我的意思是,作为一个临时解决方案,在保存插件管理设置页面后,我会将用户重定向到管理permalinks设置页面,但这不是一个理想的解决方案。我更喜欢重写规则在插件代码中正确刷新。WordPress中是否存在这样一种情况:刷新重写规则不再刷新所有规则?
admin_menu
- 插件设置页面已添加到WordPress管理中。
add_options_page()
- 插件设置页面添加在设置菜单下。
设置页面在回调中呈现add_options_page()
. 这也是$_POST
用于更新插件设置和刷新重写规则。
由于这已经是一个很长的问题,我愿意在场外链接中提供代码块(如果有帮助的话),以帮助生成有效的答案。