Wordpress获取钩子中add_user_contact_method的先前值



我使用add_user_contact_method函数实现了一个辅助邮件字段

function add_user_contact_method(array $methods)
{
// Add user contact methods
$methods['secondary_mail']   = __('Secondary Mail');
return $methods;
}
add_filter('user_contactmethods', 'add_user_contact_method');

我的问题是,当这个邮件被更改时,我试图做一些事情,我需要旧的值。

add_action('profile_update', 'DBGrename_secondary_mail', 9, 3);
function DBGrename_secondary_mail(int $user_id, WP_User $old_user_data, array $userdata){ 

debug('Entered : ' . __FUNCTION__);
debug(' Id : ' . $user_id);
debug(' Old Secondary Mail : ' . $old_user_data->secondary_mail);
}

但是$old_user_data->secondary_mail返回新值,而不是旧值,所以我尝试使用update_user_metadata,但是前面的值是空的:

add_action('update_user_metadata', 'DGB_User_Meta', 1, 5);
function DGB_User_Meta(null|bool $check, int $object_id, string $meta_key, mixed $meta_value, mixed $prev_value) {
debug('Entered : ' . __FUNCTION__);
debug(' ObjectId : ' . $object_id);
debug(' MetaKey : ' . $meta_key);
debug(' MetaValue : ' . $meta_value);
debug(' Previous Value : ' . print_r($prev_value, true));
}

是否有人有一个想法,我如何能得到以前的值,当有人改变这个字段在用户管理页面?

我找到了一个解决方案,使用update_user_meta,并从里面调用get_metadata,我得到了我想要的,但我仍然相信其他函数应该工作。

add_action('update_user_meta', 'DGB_User_Meta', 1, 4);
function DGB_User_Meta(int $meta_id, int $object_id, string $meta_key, mixed $_meta_value) {
debug('Entered : ' . __FUNCTION__);
debug(' MetaId : ' . $meta_id);
debug(' ObjectId : ' . $object_id);
debug(' MetaKey : ' . $meta_key);
debug(' MetaValue : ' . print_r($_meta_value, true));
debug(' GetMeta : ' . get_metadata('user', $object_id, $meta_key, true));
}

最新更新