我想记录修改成员个人资料 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
似乎在管理员中不起作用。
首先,请注意只有一个可用参数,即挂钩函数的
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 );
}
}
这可以以更好的方式发挥作用。