多站点用户激活时无法选择注册_元

时间:2015-10-08 作者: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;
    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), 覆盖从仪表板分配给新用户的管理员角色。因此,当一个新用户被激活时,我想检查他最初是否被分配了管理员角色,并更新插件分配的默认角色。

1 个回复
最合适的回答,由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\'] );
    }
}

相关推荐

Remove node from multisites?

我有一个如下所示的功能,其目标是从“我的网站”下拉列表中删除新帖子并管理评论。如果我将{$node\\u id}替换为blogs id,这会很好地工作。但我希望这适用于“我的站点”列表中的所有多站点。这意味着我需要获得所有的博客id。这是我已经取得的成就,但它不起作用。add_action( \'admin_bar_menu\', \'remove_nodes_from_mysites\', 999 ); function remove_nodes_from_mysites( $wp_admin_