我在重写规则未正确刷新时遇到了一个奇怪的问题。
我尝试使用flush_rewrite_rules();
和flush_rewrite_rules(true);
。
我也尝试$wp_rewrite
使用$wp_rewrite->flush_rules();
和进行全球化$wp_rewrite->flush_rules(true);
似乎都没有正确刷新重写规则。这些调用确实在调用时刷新了重写规则。我怎么知道 使用解决方案调试重写规则刷新。
目前,我在插件激活和插件停用时刷新了重写规则。那里没有问题。
我有一个插件管理设置页面,供用户配置插件。有些设置会调整永久链接结构,因此需要在插件管理设置页面“保存设置”中刷新重写规则。(使用标准update_option();
)保存设置。
我想指出,根据指定的设置,将创建自定义帖子类型以匹配用户指定的设置。因此,保存设置后必须立即清除重写规则。这是事情无法正常运行的地方。
上面的调试调试规则所提供的链接解决方案@toscho
显示了正在刷新大量的重写规则。但是,当访问自定义帖子类型的单个项目或什至是自定义帖子类型的存档时,每个返回404错误。
自定义帖子类型已正确正确注册。我确定这不是问题。
紧随其后的插件管理页面设置保存。创建自定义帖子类型,调整永久链接结构,并尝试刷新所有重写规则。
然后将始终加载自定义帖子类型,然后init
像正常一样加载它们。
由于某些原因,重写规则未正确刷新,因为就像我之前说过的那样,访问自定义帖子类型的单数或存档部分会返回404错误。
现在,奇怪的是,如果我要做的只是访问管理永久链接设置页面,然后返回到前端以查看自定义帖子类型的单数或存档部分,它们将按预期运行。
该管理永久链接设置页面做了哪些我没有做的事情,从而允许重写规则正确刷新而我的不允许这样做?
我的意思是,作为临时解决方案,我将在保存插件管理设置页面后将用户重定向到管理永久链接设置页面,但这不是理想的解决方案。我希望重写规则可以在我的插件代码中正确刷新。
在WordPress中是否有某些要点,刷新刷新规则只是不再刷新所有规则了?
admin_menu
-插件设置页面已添加到WordPress管理中。
add_options_page()
-在“设置”菜单下添加了“插件设置”页面。
设置页面在的回调中呈现add_options_page()
。这也是$_POST
更新插件设置和刷新重写规则的处理位置。
由于这已经是一个漫长的问题,所以我愿意在非现场链接中提供代码块(如果有帮助),以帮助产生有效的答案。
init
该职位类型的类。我认为,页面设置已保存,页面将重新加载...然后init
再次触发该钩子以注册必要的帖子类型。因此,我认为帖子类型已经加载,我需要做的就是更新该选项,然后从插件设置页面中刷新重写规则。我将发布一个解决方案的答案。
flush_rewrite_rules
,它只会删除该rewrite_rules
选项并重新生成该选项,您可以打开文件wp-admin/options-permalinks.php
并查看发生的位置。由于此操作只会删除整个选项,因此无法部分刷新规则。