添加用户角色:预先保存在User-Meta中[已解决]

时间:2020-08-20 作者:Ali Hamdan

我在用户注册后添加一个操作,以根据users meta\\u值添加另一个用户角色。使用时:

add_action(\'um_after_save_registration_details\', \'custom_after_new_user_register\', 10, 2);

function custom_after_new_user_register($user_id) {

$user = get_user_by(\'id\', $user_id);
if (!in_array(\'subscriber\', $user->roles)) {
    $user->add_role(editor);
    
  }}
它成功地添加了角色“editor”,但是,我似乎无法提取保存的user\\u meta并使其动态工作。

下面是我要做的,但它不起作用

add_action(\'um_after_save_registration_details\', \'custom_after_new_user_register\', 10, 2);

function custom_after_new_user_register($user_id) {

$user = get_user_by(\'id\', $user_id);
$get_portal_number = get_user_meta($user_id, \'portal_number\', false);
if (!in_array(\'subscriber\', $user->roles)) {
    $user->add_role($get_portal_number);
    
  }}
已解决:

$get_portal_number = get_user_meta($user_id, \'meta_key\', false); 
将返回一个数组,并且值必须是单个值,因此必须将其设置为

$get_portal_number = get_user_meta($user_id, \'meta_key\', true);
或者,您可以使用:

$get_portal_number = get_user_meta($user_id, \'meta_key\', false)[0];
如果您需要在不同的情况下设置false。

幸亏NightHawk 为了解决这个问题。

1 个回复
最合适的回答,由SO网友:NightHawk 整理而成

那是因为你没有给get_user_meta, 但仅仅是一串id:

$get_portal_number = get_user_meta(\'id\', \'portal_number\', false);
此外,第三个参数设置为false, 它将返回一个数组。您直接将该值传递给$user->add_role, 但这需要一个字符串。

您要么必须循环查看post元结果,要么通过传递将角色作为单个值返回true 作为第三个参数。

尝试以下操作:

add_action(\'um_after_save_registration_details\', \'custom_after_new_user_register\', 10, 2);

function custom_after_new_user_register($user_id) {

$user = get_user_by(\'id\', $user_id);
$get_portal_number = get_user_meta($user_id, \'portal_number\', true);
if (!in_array(\'subscriber\', $user->roles)) {
    $user->add_role($get_portal_number);
    
  }}