用户升级用户角色的按钮+显示当前用户角色的按钮!

时间:2016-09-19 作者:JulesB

我有一个具有不同用户角色的博客,因此具有不同的用户权限级别。

有时,我想让我的注册用户免费升级他们当前的用户角色(“em>订阅者”到“premiummber”),但我不想让每个想要手动升级的用户都这样做。

我认为有一个小插件(通过短代码运行)会很好([upgrade_user_role] + [request_user_role]) 这样,我的用户只需单击一个按钮即可升级其用户角色,而且还可以请求当前的用户角色状态。

我不知道怎么写这个。但至少我可以试着向你解释插件应该如何工作。

首先,它应该检查用户是否已经登录,如果已经登录,它应该用按钮布局加载CSS文件我真的试着自己编写代码,但我无法让它正常工作。

对于登录检查,我尝试使用is_user_logged_in() 函数与简单的if查询结合使用。对于更新和请求角色功能,我尝试使用:

$current_user = wp_get_current_user();
以及

$current_user_id = $current_user->ID;
结合

update_metadata(\'user\', $current_user_id, \'role\', \'$current_role)
Edit:我试图用下面的代码编写一个小插件,但在使用安装程序时无法获得显示的表单[show_upgrade_to_premium] 在帖子或站点中。

function upgrade_to_premium() {
    if(is_user_logged_in()) {
        if(is_page(\'upgrade-to-premium\')) {
            global $load_css;
            $load_css = true;
            $output = upgrade_to_premium_form();
            $current_user = wp_get_current_user();
            if( $current_user->roles[0] == "subscriber" || $current_user->roles[0] == "premium" ) {
                $user_id = $current_user->id;
                $role = $current_user->roles[0];
                if( $_POST[\'role\']){
                    if( $_POST[\'role\'] == $role ) {
                        echo "Sorry, you are already " . $role . "!";
                    } else {
                        $role = $_POST[\'role\'];
                        $userdata = array();
                        $userdata[\'ID\'] = $user_id;
                        $userdata[\'role\'] = $role;
                        wp_update_user($userdata);
                        echo "Your user type has been changed!  You are now " . $role . "!";
                    }
                }
            }
        }
    }
    else {

    }
    return $output;
}
add_shortcode(\'show_upgrade_to_premium\', \'upgrade_to_premium\');

function upgrade_to_premium_form() {
    ob_start(); ?>
    <h3 class="header"><?php _e(\'Upgrade to premium\'); ?></h3>
    <form id="upgrade_to_premium_form" class="form" action="" method="POST">
        Please select a role:<br/>
        <select name="role">
            <option value="subscriber" selected="selected">Subscriber</option>
            <option value="premium">Premium</option>
        </select>
        <input TYPE="submit" name="submit" />
    </form>
    <?php
    return ob_get_clean();
}

function register_css() {
    wp_register_style(\'form-css\', plugin_dir_url( __FILE__ ) . \'/css/forms.css\');
}
add_action(\'init\', \'register_css\');

function print_css() {
    global $load_css;

    if ( ! $load_css )
        return;

    wp_print_styles(\'form-css\');
}
add_action(\'wp_footer\', \'print_css\');

1 个回复
SO网友:Ahmed Fouad

要更新用户的角色,下面是一个示例代码。

$user_id = get_current_user_id();

$user = new WP_User( $user_id );
$user->set_role( \'my_new_role\' );
希望有帮助