admin管理员组

文章数量:1325147

I am adding an action after user registration to add another user role based off the users meta_value. When I use:

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);
    
  }}

It successfully adds the role 'editor', however, I seem to fail to extract the saved user_meta and make it work dynamically.

Below is what I got to but it's not working

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);
    
  }}

SOLVED:

$get_portal_number = get_user_meta($user_id, 'meta_key', false); 

will return an array and value needs to be a single value, hence it must be set to

$get_portal_number = get_user_meta($user_id, 'meta_key', true);

Alternatively, you can use:

$get_portal_number = get_user_meta($user_id, 'meta_key', false)[0];

if you need to set false in a different case.

Thanks to NightHawk for solving this.

I am adding an action after user registration to add another user role based off the users meta_value. When I use:

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);
    
  }}

It successfully adds the role 'editor', however, I seem to fail to extract the saved user_meta and make it work dynamically.

Below is what I got to but it's not working

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);
    
  }}

SOLVED:

$get_portal_number = get_user_meta($user_id, 'meta_key', false); 

will return an array and value needs to be a single value, hence it must be set to

$get_portal_number = get_user_meta($user_id, 'meta_key', true);

Alternatively, you can use:

$get_portal_number = get_user_meta($user_id, 'meta_key', false)[0];

if you need to set false in a different case.

Thanks to NightHawk for solving this.

Share Improve this question edited Aug 20, 2020 at 22:59 Ali Hamdan asked Aug 20, 2020 at 21:26 Ali HamdanAli Hamdan 791 silver badge5 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

That's because you're not passing an actual ID to get_user_meta, but merely a string of id:

$get_portal_number = get_user_meta('id', 'portal_number', false);

In addition, the third parameter is set to false, which will return an array. You're passing that value straight to $user->add_role, but that expects a string.

You either have to loop over your post meta results, or return the role as a single value by passing true as the third parameter.

Try this:

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);
    
  }}

本文标签: pluginsAdd User Role Presaved in UserMeta SOLVED