对于已经开放注册的 WordPress 站点,用户登录后的页面跳转是必须要考虑的。今天就说说 WordPress 登录后跳转或指定页面,以下代码都可以添加到主题的 functions.php

WordPress 登录后跳转指定页面

  1. /**
  2. * 用户注册成功后自动登录,并跳转到指定页面
  3. */
  4. function auto_login_new_user( $user_id ){
  5.         // 用户注册后自动登录
  6.         wp_set_current_user($user_id);
  7.         wp_set_auth_cookie($user_id);
  8.         // 这里跳转到 http://域名/about 页面,请根据自己的需要修改
  9.         wp_redirect( home_url().'about');
  10.         exit;
  11. }
  12. add_action('user_register','auto_login_new_user');

一定时间内登录重定向

  1. /**
  2. * 注册一定时间内登录重定向到指定页面
  3. */
  4. function time_limit_login_redirect( $to, $requested, $user ){
  5.         if(!isset( $user->user_login )){
  6.                 return $to;
  7.         }
  8.         $regtime = strtotime($user->user_registered);
  9.         $now = strtotime("now");
  10.         $diff = $now - $regtime;
  11.         $hours = $diff /60/60;
  12.         if( $hours <48){// 注册后 48 小时内登录重定向到该页面
  13.                 return"/about";
  14.         }else{
  15.                 return admin_url();//WP 管理后台
  16.         }
  17. }
  18. add_filter('login_redirect','time_limit_login_redirect',10,3);

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

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

  1. /**
  2. * 注册后一定时间内首次登录重定向 (Cookie 版)
  3. */
  4. function redirectOnFirstLogin( $redirect_to, $requested_redirect_to, $user )
  5. {
  6. // 重定向的页面地址
  7.         $redirect_url ='http://yoursite.com/firstloginpage';
  8. // 重定向的次数
  9.         $num_redirects =1;
  10. // 通过 Cookie 记录登录次数
  11. // 指定注册后多久时间内登录 (防止用户清空 Cookie 后重复重定向)
  12. // 172800 秒 = 48 小时
  13.         $message_period =172800;
  14. // If they're on the login page, don't do anything
  15.         if(!isset( $user->user_login ))
  16.         {
  17.                 return $redirect_to;
  18.         }
  19. // 用来保存登录记录的 Cookie 键名
  20.         $key_name ='redirect_on_first_login_'. $user->ID;
  21.         if( strtotime( $user->user_registered )>( time()- $message_period )
  22.                 &&(!isset( $_COOKIE[$key_name])|| intval( $_COOKIE[$key_name])< $num_redirects )
  23.                 )
  24.         {
  25.                 if( isset( $_COOKIE[$key_name]))
  26.                 {
  27.                         $num_redirects = intval( $_COOKIE[$key_name])+1;
  28.                 }
  29.                 setcookie( $key_name, $num_redirects, time()+ $message_period, COOKIEPATH, COOKIE_DOMAIN );
  30.                 return $redirect_url;
  31.         }
  32.         else
  33.         {
  34.                 return $redirect_to;
  35.         }
  36. }
  37. add_filter('login_redirect','redirectOnFirstLogin',10,3);

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

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

  1. /**
  2. * 注册后一定时间内首次登录重定向 (字段 版)
  3. */
  4. function redirectOnFirstLogin( $redirect_to, $requested_redirect_to, $user )
  5. {
  6. // 重定向的页面
  7.         $redirect_url ='http://yoursite.com/firstloginpage';
  8. // 重定向的次数
  9.         $num_redirects =1;
  10. // If implementing this on an existing site, this is here so that existing users don't suddenly get the "first login" treatment
  11. // On a new site, you might remove this setting and the associated check
  12. // Alternative approach: run a script to assign the "already redirected" property to all existing users
  13. // Alternative approach: use a date-based check so that all registered users before a certain date are ignored
  14. // 172800 秒 = 48 小时 (用来排除那些老用户)
  15.         $message_period =172800;
  16. // If they're on the login page, don't do anything
  17.         if(!isset( $user->user_login ))
  18.         {
  19.                 return $redirect_to;
  20.         }
  21. //添加一个字段来记录登录次数
  22.         $key_name ='redirect_on_first_login';
  23.         $current_redirect_value = get_user_meta( $user->ID, $key_name,true);
  24.         if( strtotime( $user->user_registered )>( time()- $message_period )
  25.                 &&(''== $current_redirect_value || intval( $current_redirect_value )< $num_redirects )
  26.                 )
  27.         {
  28.                 if(''!= $current_redirect_value )
  29.                 {
  30.                         $num_redirects = intval( $current_redirect_value )+1;
  31.                 }
  32.                 update_user_meta( $user->ID, $key_name, $num_redirects );
  33.                 return $redirect_url;
  34.         }
  35.         else
  36.         {
  37.                 return $redirect_to;
  38.         }
  39. }
  40. add_filter('login_redirect','redirectOnFirstLogin',10,3);

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