我在选择注册元时遇到问题,它总是返回空数组。
我的代码是:
add_action( \'wpmu_activate_user\', \'promote_to_admin\', 99 );
function promote_to_admin( $user_id, $password, $meta ) {
global $wpdb;
$user = get_userdata( $user_id );
$email = $user->user_email;
var_dump( $email );
$signup_meta = $wpdb->get_results( "SELECT meta FROM wp_signups WHERE user_email = $email" );
if ( $signup_meta[\'new_role\'] == \'administrator\' ) {
$user->set_role( \'administrator\' );
}
}
$signup_meta 作为空数组返回。然而,当我检查数据库时
signup_meta 数组包含值。
我也试过倾倒$user 和$email - 一切都很好,$user 对象填充了数据和$email 是正确的。
有人知道这里会出现什么问题,我如何检索注册元吗?
场景是管理员从仪表板添加新用户。我的目标是解析管理员创建新用户时分配的角色。
这是一次错误修复尝试,因为我正在使用插件来管理自定义和默认角色(WPFront User Role Editor), 覆盖从仪表板分配给新用户的管理员角色。因此,当一个新用户被激活时,我想检查他最初是否被分配了管理员角色,并更新插件分配的默认角色。
最合适的回答,由SO网友:xsqox 整理而成
好的,最后我把它整理出来了,这是一个查询错误(这很尴尬)。
正确代码:
add_action( \'wpmu_activate_user\', \'promote_to_admin\', 99 );
function promote_to_admin( $user_id, $password, $meta ) {
global $wpdb;
$user = get_userdata( $user_id );
$email = $user->user_email;
// You need to prepare query first to avoid SQL errors
$query = $wpdb->prepare( "SELECT meta from `wp_signups` where `user_email` = %s", $email );
// By default, Object(stdClass) will be returned;
// tell WordPress to convert it to multidimensional array
$raw_meta = $wpdb->get_results( $query, ARRAY_A );
// After conversion, array will be represented as serialized string - unserialize it
$signup_meta = unserialize( $raw_meta[0][\'meta\'] );
if ( array_key_exists( \'new_role\', $signup_meta ) ) {
$user->set_role( $signup_meta[\'new_role\'] );
}
}