现有USER_META字段未更新

时间:2019-02-22 作者:hal

为什么连接到时不允许我更新现有的用户元字段edit_user_profile_update 钩我使用此代码

add_action( \'edit_user_profile_update\', \'xpl_registration_save\' );

function xpl_registration_save( $user_id ) {
    $user = get_userdata($user_id);
    $user->add_role( \'gardner\' );
    update_user_meta($user_id,\'last_name\',\'Smith\');
    update_user_meta($user_id,\'dogs_name\',\'Sam\');
}
这适用于最后一个字段,dogs_name, 已添加并更新。但对于核心字段,其他一些由另一个插件创建的字段,它不起作用。怎么会这样?

1 个回复
SO网友:nmr

无法使用更改某些用户元字段edit_user_profile_update 钩子,因为它被触发了before 正在处理表单中的数据。所以,您将用户的元保存到数据库中,然后处理编辑表单,WP覆盖您的值。每次编辑轮廓后,都会触发此挂钩。

您应该使用insert_user_meta 过滤器(自WP v4.4起提供)以更改或添加用户的元。过滤器在创建/更新用户后应用,但元数据尚未保存到数据库。

add_action( \'insert_user_meta\', \'se329613_insert_user_meta\', 30, 3);

/** 
 * @param array $meta {
 *     Default meta values and keys for the user.
 *
 *     @type string   $nickname
 *     @type string   $first_name
 *     @type string   $last_name
 *     @type string   $description
 *     @type bool     $rich_editing
 *     @type bool     $syntax_highlighting
 *     @type bool     $comment_shortcuts
 *     @type string   $admin_color
 *     @type int|bool $use_ssl
 *     @type bool     $show_admin_bar_front
 * }
 * @param WP_User $user
 * @param bool    $update 
 */
function se329613_insert_user_meta( $meta, $user, $update ) 
{
    // set only when adding a new user
    if ( !$update ) {
        $meta[\'last_name\'] = \'Smith\';
        $meta[\'dogs_name\'] = \'Sam\';
    }
    return $meta;
}
您可以使用user_register 执行其他操作的操作。连接到的函数user_register 当所有内容都已保存时执行。

add_action( \'user_register\' , \'se329613_user_register\' );
function se329613_user_register( $user_id ) 
{
    /* some code */
}

相关推荐