UPDATE_OPTION_$OPTION操作未按预期工作

时间:2019-02-28 作者:idealbrandon

我有一个使用设置API的自定义管理页面。表单提交给选项。php。提交后,我试图在后台做一些事情。我正迷上update_option_$option 这样做。除了第一次运行外,这工作正常。无论我做了什么,我都无法得到update_option_$option 钩住跑步。这是故意的行为吗?

function my_register_settings() {
     register_setting(\'my_settings_group\', \'my_custom_option\');
}
add_action(\'admin_init\', \'my_register_settings\');

function do_after_update($old, $new) {
     // Do the stuff here
}
add_action(\'update_option_my_custom_option\',\'do_after_update\', 10, 2);
thedo_after_update() 只会在第二次及以后开火。我通过添加add_option(\'my_custom_option\'); 进入我的注册功能,但这似乎有问题。

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

看起来像update_option_{$option} 只会在updated 选项,即不是全新的选项。

正在读取的代码update_option(), 我看到了:

/** This filter is documented in wp-includes/option.php */
if ( apply_filters( "default_option_{$option}", false, $option, false ) === $old_value ) {
    // Default setting for new options is \'yes\'.
    if ( null === $autoload ) {
        $autoload = \'yes\';
    }

    return add_option( $option, $value, \'\', $autoload );
}
。。。在update_option_{$option} 钩自从你$old_value 未设置false, 所以,自从false === false, 你在打return add_option() 密码

add_option() 有自己的相关动作挂钩:add_option_{$option}. 所以你也应该能融入其中。

您的更新代码:

function my_register_settings() {
     register_setting(\'my_settings_group\', \'my_custom_option\');
}
add_action(\'admin_init\', \'my_register_settings\');

function do_after_update($old, $new) {
     // Do the stuff here
}
add_action(\'update_option_my_custom_option\',\'do_after_update\', 10, 2);

function do_after_add( $new ) {
    // Do the stuff here
}
add_action( \'add_option_my_custom_option\', \'do_after_add\' );