调用wp_insert_user设置show_admin_bar_front为false后,前台管理栏仍显示求助
问题原因及解决方案
这个问题我之前也碰到过,主要是两个核心原因导致的:
1. wp_insert_user() 不支持直接传入 show_admin_bar_front 作为顶层参数
show_admin_bar_front 并不是WordPress用户主表(wp_users)的字段,它属于用户元数据(存储在wp_usermeta表中)。而wp_insert_user()函数的顶层参数只对应wp_users表的字段,你直接把这个选项放在插入数组里,函数会直接忽略这个未被定义的参数,根本不会把它写入用户元数据中。
2. 布尔值不符合该元字段的存储要求
退一步说,就算你通过某种方式传入了这个参数,WordPress对show_admin_bar_front的存储要求是字符串值('true'或'false'),而不是你传入的布尔值false。布尔值会被转换成不符合预期的格式,导致系统无法正确识别你的设置。
解决办法
方法一:插入用户后单独设置用户元数据
先完成用户插入,再用update_user_meta()函数专门设置这个选项,这是最稳妥的方式:
// 先执行用户插入操作 $user_id = wp_insert_user( array ( 'user_login' => crb_get_nicname( $_POST['first_name'], $_POST['last_name'] ), 'user_email' => $_POST['email'], 'user_pass' => $_POST['password'], 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'], 'role' => $_POST['role'] ) ); // 检查插入是否成功,避免错误 if ( ! is_wp_error( $user_id ) ) { // 设置前台不显示管理栏,注意这里是字符串'false' update_user_meta( $user_id, 'show_admin_bar_front', 'false' ); }
方法二:使用meta_input参数批量设置元数据
WordPress 4.4+版本支持meta_input参数,可以在插入用户时批量设置用户元数据,这样能一步完成操作:
$user_id = wp_insert_user( array ( 'user_login' => crb_get_nicname( $_POST['first_name'], $_POST['last_name'] ), 'user_email' => $_POST['email'], 'user_pass' => $_POST['password'], 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'], 'role' => $_POST['role'], // 把用户元字段放在meta_input数组里 'meta_input' => array( 'show_admin_bar_front' => 'false' ) ) );
另外补充一点:如果你的用户角色是管理员,即使设置了show_admin_bar_front为'false',有些主题或插件可能会强制显示管理栏,这时候你可能需要额外检查主题的functions.php或者相关插件的设置,但这种情况比较少见。
内容的提问来源于stack exchange,提问作者Svetlozar
相关产品推荐
相关产品推荐

