我有以下代码(注意,我把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 )
, 应该传递旧值。
为什么它没有给我那个价值?
最合适的回答,由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\' );