WordPress 用户注册后自动登录/首次登录跳转到指定页面

对于开放注册的WordPress站点,用户登录后的页面跳转(重定向)是需要好好考虑的。之前分享过《WordPress 登录/登出(注销)后返回之前访问的页面》,今天要说的是将首次登录或者在指定时间内登录的用户,重定向到指定页面。以下代码都可以添加到主题的 functions.php

自动登录并重定向

注册后自动登录并且重定向到指定页面,其实也是实现首次登录重定向的最简便的方法。

/**
  * <a href="https://www.wpdaxue.com/tag/%e7%94%a8%e6%88%b7%e6%b3%a8%e5%86%8c" title="查看与【用户注册】相关的文章" target="_blank" rel="noopener">用户注册</a>成功后自动登录,并跳转到指定页面
  * https://www.wpdaxue.com/user-first-login-redirect.html
  */  
function auto_login_new_user( $user_id ) {
	// 用户注册后自动登录
	wp_set_current_user($user_id);
	wp_set_auth_cookie($user_id);
	// 这里跳转到 http://域名/about 页面,请根据自己的需要修改
	wp_redirect( home_url().'about' ); 
	exit;
}
add_action( 'user_register', 'auto_login_new_user');

一定时间内登录重定向

注册后的一定时间内,不管是第几次登录,都跳转到指定页面

/**
  * 注册一定时间内登录重定向到指定页面
  * https://www.wpdaxue.com/user-first-login-redirect.html
  */
function time_limit_login_redirect( $to, $requested, $user ){
	if( !isset( $user-&gt;user_login ) ){ 
		return $to;
	}
	$regtime = strtotime($user-&gt;user_registered);
	$now = strtotime(&quot;now&quot;);
	$diff = $now - $regtime;
	$hours = $diff / 60 / 60;
	if( $hours &lt; 48 ){ // 注册后48小时内登录重定向到该页面
		return &quot;/about&quot;; 
	} else {
		return admin_url(); //WP管理后台
	}
}
add_filter('login_redirect', 'time_limit_login_redirect', 10, 3);

一定时间内首次登录重定向(Cookie 版)

使用Cookie记录登录次数,如果在一定时间内登录,且登录次数小于指定次数,就重定向到指定页面

/**
  * 注册后一定时间内首次登录重定向(Cookie 版)
  * https://www.wpdaxue.com/user-first-login-redirect.html
  */
function redirectOnFirstLogin( $redirect_to, $requested_redirect_to, $user )
{
    // 重定向的页面地址
	$redirect_url = 'http://yoursite.com/firstloginpage';
    // 重定向的次数
	$num_redirects = 1;
    // 通过 Cookie 记录登录次数
    // 指定注册后多久时间内登录(防止用户清空 Cookie 后重复重定向)
    // 172800 秒 = 48 小时
	$message_period = 172800;
 
    // If they're on the login page, don't do anything
	if( !isset( $user-&gt;user_login ) )
	{
		return $redirect_to;
	}
    // 用来保存登录记录的 Cookie 键名
	$key_name = 'redirect_on_first_login_' . $user-&gt;ID;
 
	if( strtotime( $user-&gt;user_registered ) &gt; ( time() - $message_period )
		&amp;&amp; ( !isset( $_COOKIE[$key_name] ) || intval( $_COOKIE[$key_name] ) &lt; $num_redirects )
		)
	{
		if( isset( $_COOKIE[$key_name] ) )
		{
			$num_redirects = intval( $_COOKIE[$key_name] ) + 1;
		}
		setcookie( $key_name, $num_redirects, time() + $message_period, COOKIEPATH, COOKIE_DOMAIN );
		return $redirect_url;
	}
	else
	{
		return $redirect_to;
	}
}
add_filter( 'login_redirect', 'redirectOnFirstLogin', 10, 3 );

一定时间内首次登录重定向(字段 版)

使用自定义字段来保存登录次数,如果用户注册时间小于指定时间(比如 48小时),且字段的数值小于指定次数,就重定向

/**
  * 注册后一定时间内首次登录重定向(字段 版)
  * https://www.wpdaxue.com/user-first-login-redirect.html
  */
function redirectOnFirstLogin( $redirect_to, $requested_redirect_to, $user )
{
    // 重定向的页面
	$redirect_url = 'http://yoursite.com/firstloginpage';
    // 重定向的次数
	$num_redirects = 1;
    // If implementing this on an existing site, this is here so that existing users don't suddenly get the &quot;first login&quot; treatment
    // On a new site, you might remove this setting and the associated check
    // Alternative approach: run a script to assign the &quot;already redirected&quot; property to all existing users
    // Alternative approach: use a date-based check so that all registered users before a certain date are ignored
    // 172800 秒 = 48 小时(用来排除那些老用户)
	$message_period = 172800;
 
    // If they're on the login page, don't do anything
	if( !isset( $user-&gt;user_login ) )
	{
		return $redirect_to;
	}
    //添加一个字段来记录登录次数
	$key_name = 'redirect_on_first_login';
	$current_redirect_value = get_user_meta( $user-&gt;ID, $key_name, true );
	if( strtotime( $user-&gt;user_registered ) &gt; ( time() - $message_period )
		&amp;&amp; ( '' == $current_redirect_value || intval( $current_redirect_value ) &lt; $num_redirects )
		)
	{
		if( '' != $current_redirect_value )
		{
			$num_redirects = intval( $current_redirect_value ) + 1;
		}
		update_user_meta( $user-&gt;ID, $key_name, $num_redirects );
		return $redirect_url;
	}
	else
	{
		return $redirect_to;
	}
}
add_filter( 'login_redirect', 'redirectOnFirstLogin', 10, 3 );

参考资料:

http://wordpress.stackexchange.com/questions/24164/

http://www.theblog.ca/wordpress-redirect-first-login

来源:

https://www.wpdaxue.com/user-first-login-redirect.html

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_33166.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?