如何获取刚刚更新的用户元字段?

时间:2021-06-30 作者:roly151

当从后端/管理员在用户编辑页面中更新用户wordpress配置文件时,我正在尝试更新BuddyBoss配置文件。(基本上我想同步数据)。我有这个功能:

function BB_WP_SYNC_update_BB_profile( $user_id ) {
    
        // Get user information    
     $country = get_user_meta($user_id, \'ofc_country\', true);
     error_log($country);
     $region = get_user_meta($user_id, \'ofc_regional_organisation\', true);
     error_log($region);
     $gender = get_user_meta($user_id, \'ofc_gender\', true);
     error_log($gender);
     $dob = get_user_meta($user_id, \'ofc_date_of_birth\', true);
     $timestamp = strtotime(str_replace(\'/\', \'-\', $dob));

     $date = date(\'Y-m-d H:i:s\', $timestamp);

     //Update BuddyBoss Profile
     xprofile_set_field_data(\'Country\', $user_id, $country, true);
     xprofile_set_field_data(\'Regional Organisation\', $user_id, $region, true);
     xprofile_set_field_data(\'Gender\', $user_id, $gender, true);
     xprofile_set_field_data(\'Date of Birth\', $user_id, $date, true);

}
add_action( \'edit_user_profile_update\', \'BB_WP_SYNC_update_BB_profile\');
add_action( \'personal_options_update\', \'BB_WP_SYNC_update_BB_profile\');
此函数获取的用户信息是更新之前的旧信息。例如,如果我将国家/地区从澳大利亚更改为塔希提岛,则函数中的$Country设置为澳大利亚。

我必须再次单击update profile按钮,它才能获得新的值(显然是第一次单击时设置的),然后它才能正确地更新BuddyBoss。

似乎是“edit\\u user\\u profile\\u update”&;\'personal\\u options\\u update“在更新用户元字段之前挂接。

是否有其他方法可以确保用户元字段和;在钩子触发之前更新用户字段?

1 个回复
SO网友:roly151

对于其他有此问题的人来说,解决方法很简单。我改变了挂钩,最重要的是,我改变了优先顺序,所以我的行动会推迟。默认wordpress优先级为10,所以我将优先级设置为11,这样就可以了。

add_action( \'profile_update\', \'BB_WP_SYNC_update_BB_profile\', 11, 2);
由于挂钩不同,我的功能也发生了变化:

function BB_WP_SYNC_update_BB_profile( $user_id, $old_user_data ) {

相关推荐

Conditional action hooks

我正在开发一个使用AJAX的插件,但我在控制代码流方面遇到了困难。我想在运行条件后挂接函数。我的钩子在控制结构内部添加时不会启动,但在外部会启动。我还有一个触发AJAX请求的事件,这只能在用户点击触发事件后,在加载所有DOM之后发生。AJAX请求告诉PHP函数设置cookie。它设置了cookie,但在阅读关于cookie的PHP文档时,我发现它们只能在发送任何输出后设置,但我还是做到了这一点?我读过WordPress初始化序列,但这并没有帮助我解决这个问题。这是我的密码:add_action(\'wp_