我在用户注册后添加一个操作,以根据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 为了解决这个问题。
最合适的回答,由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);
}}