使用设置API更新选项时刷新重写规则

时间:2014-09-20 作者:user1257255

我正在开发一些插件,需要在其中启用自定义URL重写。我想通过设置API来编辑自定义URL,所以基本上我做了验证和更新选项所需的一切。在注册自定义帖子类型时,重写URL选项已经在插件激活时传递,所以我需要在选项更新后以某种方式对其进行更改。存在的主要问题是,如何在验证重写URL的值是否已实际更改后刷新\\u rewrite\\u rules()。

我在init操作上注册自定义的post类型,我正在写的validate设置为admin\\u init操作中的register\\u设置。保存设置更改后,验证功能运行一次,然后请求重定向回选项页。

我尝试了下面的代码,但URL只有在第二次更新后才会更改(我必须单击“保存更改”按钮两次):

function my_plugin_name_validate_options($args) {
    foreach($args as $key => $value) {
        switch ($key) {
            case \'rewrite_url\':
                flush_rewrite_rules();
                break;
            case \'other\':
                // code for other cases... too long to post here
                break;
        }
    }
}
这段代码只是一个示例,在这里我刷新重写规则,它实际上没有被使用,但我像这样验证每个选项字段。

问题是在验证/更新选项后,我应该在哪里运行flush\\u rewrite\\u rules()来更新更改?

1 个回复
最合适的回答,由SO网友:Otto 整理而成

我在init操作上注册自定义的post类型,我正在写的validate设置为admin\\u init操作中的register\\u设置。

这是你问题的关键。您正在注册自定义帖子类型,可能您正在该注册中设置重写规则。

当你打电话的时候flush_rewrite_rules(), 此时,规则将立即重建。因此,在验证函数中,尚未保存重写规则的新设置,也未使用新规则更新自定义帖子类型注册。

注意:添加的清理/验证函数回调使用register_setting 在将设置保存到数据库之前而不是之后运行。

基本上,您需要更好地处理更改。可以在验证函数中执行此操作,但可能需要先修改已注册的CPT。基本上,用更改再次注册它。然后,当您刷新重写规则时,它应该通过您的修改正确地重建它们。

在第二次尝试时,这对您有效的原因是因为您保存和刷新的方式。第一次刷新,但重写规则没有更改。然后,保存您的选项。在下一次加载时,CPT将使用您的新信息注册,因此您的新规则已经存在,但您尚未刷新。再次保存会导致第二次刷新,现在您的规则生效。

结束

相关推荐

Multisite and plugins options

我需要更多关于get_site_option(), update_site_option() 和add_site_option().在codex中,他们说它与单次安装相同,只是在多站点中,它返回网络范围的选项。好吧,但我对这一点感到困惑:这是否意味着一旦设置了网络范围选项,所有站点的选项都是相同的?还是每个站点都会覆盖它?我的意思是如果我这样做: update_site_option(\'option_group\', \'default_options());// default_options() r