这里有一个基本方法。
首先,您需要在链接中传递一些信息,以提供一些用户信息,您可以使用这些信息登录用户。为此,您需要过滤发送给用户的电子邮件。(实际上可以加载自定义的新用户注册电子邮件,但这必须作为插件来完成,因为该功能是一个可插入的功能。与此相反,此方法只是根据注册电子邮件的主题行过滤电子邮件内容。)
//为注册电子邮件正文添加筛选器
add_filter( \'wp_mail\', \'set_up_auto_login_link\' );
function set_up_auto_login_link( $atts ) {
// if the email subject is "Your username and password"
if ( isset ( $atts [\'subject\'] ) && $atts[\'subject\'] = \'Your username and password\' ) {
if ( isset( $atts[\'message\'] ) ) {
$old = \'/wp-login.php\';
$new = \'/wp-login.php?user=\' . $_POST[\'user_login\'];
$atts[\'message\'] = str_replace( $old, $new, $atts[\'message\'] );
}
}
return $atts;
}
这将以添加到登录链接的查询字符串的形式将注册表中选定的用户名放入电子邮件中。当用户单击链接时,可以使用该用户名登录。
为此,我已连接到init操作。这将检查查询字符串中的“user”参数。如果存在,它将使用get\\u user\\u by通过用户名(登录)获取用户数据。如果返回有效用户,我们可以使用用户名和检索到的用户ID登录用户:
add_action( \'init\', \'log_user_in\' );
function log_user_in() {
if ( isset( $_GET[\'user\'] ) ) {
// get the username from the URL
$user_login = $_GET[\'user\'];
// get the user data (need the ID for login)
$user = get_user_by( \'login\', $user_login );
// if a user is returned, log them in
if ( $user && ! user_can( $user->ID, \'manage_options\' ) ) {
wp_set_current_user( $user->ID, $user_login );
wp_set_auth_cookie( $user->ID );
do_action( \'wp_login\', $user_login );
wp_redirect( home_url() );
exit();
}
}
}
请注意,此过程不会给您任何真正的安全性,因为任何拥有有效用户名的人都可以作为该用户登录。它会进行检查,以确保登录的用户不是管理员(user\\u can(\'manage\\u options\')),否则任何具有管理员用户登录名的人都可以获得访问权限。明智的做法是加入一些额外的检查——可能还需要创建一个密钥或哈希来添加到链接,这是在注册时完成的,可以用来验证用户。