我试图检测用户何时更改其名称。
我试过使用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 }
最合适的回答,由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 );