如何在用户更改姓名时进行检测?

时间:2017-01-17 作者:dwlorimer

我试图检测用户何时更改其名称。

我试过使用profile_update 挂钩:

add_action( \'profile_update\', \'my_profile_update\', 10, 2 );
function my_profile_update( $user_id, $old_user_data ) {

https://codex.wordpress.org/Plugin_API/Action_Reference/profile_update

我可以访问$_POST 获取新名称字段的数据,但$old_user_data 不包含名称字段,并且由于此操作在数据保存后激发,因此旧名称字段也不在数据库中。

我看了一遍user.php, 我看到的最好的过滤器是每个名称字段的过滤器,例如:

$meta[\'first_name\'] = apply_filters( \'pre_user_first_name\', $first_name );
不过,我更喜欢能够访问所有数据的东西,而不是单独检查每个名称。

是否有一个钩子在表单提交后但在数据保存前触发?

我想做这样的事情:

if ($new_first_name != $old_first_name) { //store old_first_name }

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

你要找的钩子是insert_user_meta.

add_filter( \'insert_user_meta\', function( $meta, $user, $update ) {
  if( true !== $update ) return $meta;
  $old_meta = get_user_meta( $user->ID );
  if( $old_meta[ \'first_name\' ] !== $meta[ \'first_name\' ] ) {
    //* Do something
  }
  return $meta;
}, 10, 3 );

相关推荐

Hooks are not executing

根据我对钩子的理解,您可以通过do\\u action(“hook\\u name”)创建一个钩子;然后向所述钩子中添加一些内容,并在希望它执行钩子的位置调用该方法,因此:public function hook_name(){ do_action(\'hook_name\'); } 有些地方你会做类似的事情:add_action(\'hook_name\', \'some_hook\'); 然后在主题中的一些地方,你称之为:hook_name();