UPDATE_OPTION()保存到数据库后如何比较?

时间:2019-08-02 作者:Seraware

我在获取update\\u选项操作挂钩的任何可用信息或示例时遇到问题。我的目标是比较我的数据的新旧价值,然后向用户发送电子邮件进行更改。下面是挂钩:

add_action(\'update_option\', function( $option_name, $old_value, $value ) {
 //....
}, 10, 3)
我已经按原样编写了代码以进行测试运行,但什么也没发生。我的问题是$option\\u name、$old\\u value、$value中包含了什么?对不起,我对php还很陌生。如有任何解释和示例,将不胜感激。

编辑:

以下是完整代码。这样做的目的是比较数据是否发生了变化,然后回声:

 add_action(\'updated_option\', function( $options, $old_value, $value ) {
 $options = $options;
foreach ($options as $value) {
    $value[\'id\'] = $old_value;
    $value[\'id\'] = $value;
}
if($old_value == $value){
    echo \'data is current\';
else{
    echo \'there has been changes\';
  }
}, 10, 3);
我还是什么都没有得到。

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

查看更新问题中的完整代码,您似乎只是在检查选项是否已更改;因此,出于这个目的,您可以简单地这样做<option name> 选项名称如下my_option:

add_action( \'update_option_<option name>\', function(){
    // you shouldn\'t echo, but this is just for testing
    echo \'option changed\';
} );
And if the option\'s value is actually the same as the old one, the above function won\'t be called. 因为这就是update_option() 有效-如果调用了它但选项的值没有更改,那么钩子update_option_<option name> 不会被呼叫。而且updated_optionupdate_option

现在您说,“我的选项名包含用户ID”,并提到选项名是<user ID>_interview_date. 在这种情况下,你可以这样做:

选项1:验证用户ID/数据:

add_action( \'updated_option\', function( $option_name ){
    if ( preg_match( \'/^(\\d+)_interview_date$/\', $option_name, $matches ) ) {
        $user_id = absint( $matches[1] );
        // Check if the user exists.
        if ( $user_id && ( $user = get_userdata( $user_id ) ) ) {
            // you shouldn\'t echo, but this is just for testing
            echo $option_name . \' option changed\';
        }
    }
} );

add_action( \'updated_option\', function( $option_name ){
    if ( preg_match( \'/^(\\d+)_interview_date$/\', $option_name, $matches ) ) {
        // you shouldn\'t echo, but this is just for testing
        echo $option_name . \' option changed; no validations performed..\';
    }
} );