admin管理员组文章数量:1325231
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 badges1 Answer
Reset to default 1That'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
版权声明:本文标题:plugins - Add User Role: Pre-saved in User-Meta [SOLVED] 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742171257a2426754.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论