通过URL [WordPress]更改用户角色

时间:2015-08-18 19:59:18

标签: php wordpress wordpress-plugin

我正在创建插件,该插件会将所有新用户注册为role = unverified并停止用户登录,直到电子邮件验证为止。我想在他们的电子邮件中发送网址,这会将当前未经验证的角色更改为作者。我知道如何在WordPress中发送所有这些电子邮件,但无法弄清楚如何创建将改变角色的网址。我使用自定义ajax表单登录,注册和丢失密码因为它我无法使用pie寄存器和register-plus-redux插件。

当前代码

function add_roles_on_plugin_activation() {
    add_role( 'custom_role', 'Unverified', array( 'read' => true, 'level_0' => true ) );
}
register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' ); 

function remove_roles_on_plugin_deactivation() {
    remove_role( 'custom_role' );
}
register_deactivation_hook( __FILE__, 'remove_roles_on_plugin_deactivation' ); 

add_filter('pre_option_default_role', function($default_role){
    return 'custom_role'; 
    return $default_role; 
});


function error_email_verify() {
$user = wp_get_current_user();
if ( in_array( 'custom_role', (array) $user->roles ) ) {

       $logout_url = wp_login_url().'?mode=emailverify';
       wp_logout();
       wp_redirect( $logout_url );
       exit();
    }     
}
add_action('wp_loaded', 'error_email_verify');

function my_login_message() {

    if( $_GET['mode'] == 'emailverify' ){
        $message = '<p id="login_error"><b>Verify your email.</b></p>';
        return $message;
    }

}
add_filter('login_message', 'my_login_message');

1 个答案:

答案 0 :(得分:2)

这是我要做的。基本上我会生成一个链接,其中附加了一些参数:

生成链接

$username = 'user_login';
$hashcode = sha1(md5(md5("hacaak".$username."aalog")));
$link = get_home_url().'/?a='.$hashcode.'&b='.$hashcode.'&u='.$username.'&c='.$hashcode.'';


链接输出

[HTTP:yourwebsite.com/a=fe440709d341e7b4994636b12e556aa7f23bb9ce& B = fe440709d341e7b4994636b12e556aa7f23bb9ce&安培; U =插孔和C = fe440709d341e7b4994636b12e556aa7f23bb9ce] [1]

当用户点击您刚发送的电子邮件中的此链接时,请使用此方法来捕获进入网站的GET参数:

从url获取变量的函数

function catch_email(){
    if(isset($_GET['a']))
    {
        $username = sanitize_user($_GET['u']);
        $user=get_user_by( 'login', $username );
        $user_id = $user->ID;
        $user_role = new WP_User($user_id);
        $user_role->remove_role( 'unverified' );
        $user_role->add_role( 'author' );
        $url = get_home_url().'/Login?mode=emailverify';
        wp_redirect($url);
    }
}

add_action('get_header', 'catch_email');