填写修改用户资料的ACF字段

问题描述 投票:0回答:1

我想记录修改成员个人资料 ACF 字段的用户(管理员、版主)的

user_id
display_name
。因为此字段将用于识别谁是通过电子邮件通知插件更新会员个人资料的负责用户。所以一般来说,我需要在用户点击“更新个人资料”按钮之前
display_name
立即出现。

我当前的代码:

add_action( 'edit_user_profile', 'member_profile', 20, 2 );
add_action( 'show_user_profile', 'member_profile', 20, 2 );
function member_profile( $member_id, $user_id ) {

  update_field( 'field_673bbd254e89a', $user_id->display_name, 'user_'.$member_id );

};

但是,我注意到

user_id->display_name
'user_'.$member_id
似乎在管理员中不起作用。

php wordpress advanced-custom-fields
1个回答
0
投票

首先,请注意只有一个可用参数,即挂钩函数的

WP_User
对象。

另请注意,

edit_user_profile
show_user_profile
是用于在查看的用户个人资料上显示输入字段的挂钩,但在提交时不保存数据。

所以你可以尝试以下稍微不同的方法:

add_action( 'edit_user_profile', 'keep_last_edit_user_dname', 20, 1 );
add_action( 'show_user_profile', 'keep_last_edit_user_dname', 20, 1 );
function keep_last_edit_user_dname( $user ) {
    global $current_user;

    // If the current user role matches with admin or moderator
    if ( array_intersect( $current_user->roles, ['administrator', 'moderator'] ) ) { 
        // Update the ACF field
        update_field( 'field_673bbd254e89a', $current_user->display_name, user->ID );
    }
};

但每次访问用户个人资料时,它都应该获取当前用户的显示名称(当它是管理员或主持人时)。


更好的方法

也许更好的方法应该是使用管理员或版主显示名称显示隐藏的输入字段,这样您就可以在数据更改(或保存)时更新该字段,例如:

add_action( 'edit_user_profile', 'add_last_edit_user_dname', 20, 1 );
add_action( 'show_user_profile', 'add_last_edit_user_dname', 20, 1 );
function keep_last_edit_user_dname( $user ) {
    global $current_user;

    // If the current user role matches with admin or moderator
    if ( array_intersect( $current_user->roles, ['administrator', 'moderator'] ) ) { 
        // Display a hidden input field with the admin display name
        printf('<input type="hidden" name="modified_by" value="%s" />' $current_user->display_name );
    }
};

然后,当通过提交编辑用户数据时,我们使用以下内容来更新 ACF 字段:

// Save the custom field 'favorite_color' in admin user
add_action( 'personal_options_update', 'save_last_edit_user_dname', 20 );
add_action( 'edit_user_profile_update', 'save_last_edit_user_dname', 20 );
function save_last_edit_user_dname( $user_id )
{
    if( isset($_POST['modified_by']) && ! empty($_POST['modified_by']) ) {
        // Update the ACF field
        update_field( 'field_673bbd254e89a', esc_attr($_POST['modified_by']), $user_id );
    }
}

这可以以更好的方式发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.