UPDATE_OPTION_{$OPTION}未显示旧值

时间:2015-06-24 作者:Bird87 ZA

我有以下代码(注意,我把mail() 函数仅用于查看值):

add_action(\'init\',\'system_init_actions\');
function system_init_actions() {
    add_action(\'update_option_system_number\',\'system_save_number\');
}

function system_save_number($oldvalue,$newvalue) {
    global $wpdb;
    global $table_prefix;
    mail(\'[email protected]\',\'here\',print_r($oldvalue,true) . "\\n\\n" . print_r($newvalue,true));
    $wpdb->update($table_prefix . "system_config",[\'status\'=>\'deactivated\'],[\'number\'=>$oldvalue]);
    $wpdb->insert($table_prefix . "system_config",[\'number\'=> $newvalue,\'created\'=>date(\'Y-m-d H:i:s\'),\'status\'=>\'pending\']);
}
在我的插件选项页面中,我有一个名为system_number. 当我保存系统号时,我收到一封电子邮件(同样,只是为了查看值),这意味着它正在调用函数。

$newvalue 已顺利通过,但函数未接收$oldvalue. 我看了一下update_option() wp中的方法包括/选项。php和it激发do_action ( "update_option_{$option}", mixed $old_value, mixed $value ), 应该传递旧值。

为什么它没有给我那个价值?

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

您应该使用pre_update_option_{option_name} 滤器

示例:-

function system_save_number( $new_value, $old_value ) {
    mail(\'[email protected]\',\'here\',print_r($old_value ,true) . "\\n\\n" . print_r($new_value,true));
    return $new_value;
}

function system_init_actions() {
    add_filter( \'pre_update_option_system_number\', \'system_save_number\', 10, 2 );
}

add_action( \'init\', \'system_init_actions\' );

结束

相关推荐

为什么WordPress 4.1在wp_Options中有一个自动更新条目?

Wordpress 4.0.1为什么要自动升级到4.1?具体来说,我在wp\\u options表中看到,在option with name中_site_transient_update_core, 具有更新和自动更新的序列化数组:。。。O: 8:“stdClass”:11:{s:8:“响应”;s:10:“自动更新”;s:8:“下载”;s:57:https://downloads.wordpress.org/release/wordpress-4.1.zip“s:6:“语言环境”;s:5:“en\\US”