如果有人保存插件选项,是否挂起?

时间:2015-02-06 作者:Torben

我写了一个插件,它有各种选项,如果用户保存这些选项,就会生成一个CSS文件。我的意图是,CSS只在保存选项时创建,而不是在有人访问页面时创建,每次都会创建CSS。

所以我需要一个钩子,当有人保存选项时可以开火。我这样试过:

    public function __construct( $file ) {
        $this->options = get_option(\'clb_plugin_options\');
        add_filter( \'pre_update_option_clb_plugin_options\', array( $this, \'generate_options_css\' ) );       
}

    public function generate_options_css() {
[doing all css related stuff)

        return $this->options;

}
但在这种情况下,它没有考虑我在表单中所做的任何更改,因为我只是将选项保存在$this->options中,这些选项已经存在。那么,在有人保存插件选项后,我该如何进行连接。。。?

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

虽然我不同意你的目的,但这里是你可能使用的动作挂钩(你没有向我们展示你正在使用什么来保存选项,所以我不能说哪一个更好)。

如果您使用add_option 保存选项:

add_option_{option_name}: 跑步after a已使用添加名为“option\\u name”的选项add_option() 作用例如,对于名为“foo”的选项:

add_action(\'add_option_foo\', function( $option_name, $option_value ) {
     //....
}, 10, 2);
add_option: 跑步before 将向数据库中添加一个选项。示例:

add_action(\'add_option\', function( $option_name, $option_value ) {
     //....
}, 10, 2);
added_option: 跑步after 已添加选项。示例:

add_action(\'added_option\', function( $option_name, $option_value ) {
     //....
}, 10, 2);
还有模拟操作delete_option(): delete_option_{option_name}, delete_optiondeleted_option

如果您使用update_option 保存选项:

(update_option 也可用于保存/创建新选项)

update_option_{option_name}: 跑步after 名为“option\\u name”的选项已更新。例如,对于名为“foo”的选项:

add_action(\'update_option_foo\', function( $old_value, $value ) {
     //....
}, 10, 2);
update_option: 跑步before 更新选项。示例:

add_action(\'update_option\', function( $option_name, $old_value, $value ) {
     //....
}, 10, 3);
updated_option: 跑步after 已更新an选项。示例:

add_action(\'updated_option\', function( $option_name, $old_value, $value ) {
     //....
}, 10, 3);

SO网友:Andreas

我经历过update_option_{option_name} 未执行后续设置更改,仅执行一次。

最后,我通过在add_options_page 回调函数。这样,如果刚刚打开选项页,就会生成该选项,但开销似乎可以接受。

结束

相关推荐

Multisite and plugins options

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