我正在创建插件,该插件会将所有新用户注册为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');
答案 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');