如何在使用设置API保存设置后刷新规则?

时间:2012-04-02 作者:Matt

我使用设置API允许用户切换has_archive 某些自定义帖子类型上的选项。当用户打开或关闭存档时,我想刷新重写规则。如果我自己编写了保存函数,我就可以调用flush_rewrite_rules() 虽然已经完成了,但设置API为我保存了数据。有什么地方可以用钩子吗?

选择的解决方案@Stephen Harris

add_action(\'admin_init\', \'my_plugin_register_settings\');
function my_plugin_register_settings() {
    if (delete_transient(\'my_plugin_flush_rules\')) flush_rewrite_rules();
    register_setting(\'my_plugin\', \'my_plugin_settings\', \'my_plugin_sanitize\');
    // add_settings_section(), add_settings_field(),...
}

function my_plugin_sanitize($input) {
    set_transient(\'my_plugin_flush_rules\', true);
    return $input;
}

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

保存设置后,只需访问“设置”>“永久链接”页面(无需在此处执行任何操作)。

如果我自己编写了保存函数,我可以调用flush\\u rewrite\\u rules()

不完全是。flush_rewrite_rules() 必须在自定义帖子类型“更新”后调用,以反映更改,即在您注册它之后。因此,您需要在注册CPT后的下一次页面加载时调用它。

您可以在下一个(and only the next) init (注册CPT后)。要明确的是,flush_rewrite_rules() 这就是为什么我建议您只需告诉您的插件用户在更改任何永久链接选项后访问“设置”>“永久链接”页面,这样规则只有在真正需要时才会刷新。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴