對於已經開放註冊的 WordPress 站點,使用者登入後的頁面跳轉是必須要考慮的。今天就說說 WordPress 登入後跳轉或指定頁面,以下程式碼都可以新增到主題的 functions.php
WordPress 登入後跳轉指定頁面
- /**
- * 使用者註冊成功後自動登入,並跳轉到指定頁面
- */
- 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');
一定時間內登入重定向
- /**
- * 註冊一定時間內登入重定向到指定頁面
- */
- function time_limit_login_redirect( $to, $requested, $user ){
- if(!isset( $user->user_login )){
- return $to;
- }
- $regtime = strtotime($user->user_registered);
- $now = strtotime("now");
- $diff = $now - $regtime;
- $hours = $diff /60/60;
- if( $hours <48){// 註冊後 48 小時內登入重定向到該頁面
- return"/about";
- }else{
- return admin_url();//WP 管理後臺
- }
- }
- add_filter('login_redirect','time_limit_login_redirect',10,3);
註冊後的一定時間內,不管是第幾次登入,都跳轉到指定頁面。
一定時間內首次登入重定向 (Cookie 版)
- /**
- * 註冊後一定時間內首次登入重定向 (Cookie 版)
- */
- 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->user_login ))
- {
- return $redirect_to;
- }
- // 用來儲存登入記錄的 Cookie 鍵名
- $key_name ='redirect_on_first_login_'. $user->ID;
- if( strtotime( $user->user_registered )>( time()- $message_period )
- &&(!isset( $_COOKIE[$key_name])|| intval( $_COOKIE[$key_name])< $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);
使用 Cookie 記錄登入次數,如果在一定時間內登入,且登入次數小於指定次數,就重定向到指定頁面。
一定時間內首次登入重定向 (欄位 版)
- /**
- * 註冊後一定時間內首次登入重定向 (欄位 版)
- */
- 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 "first login" treatment
- // On a new site, you might remove this setting and the associated check
- // Alternative approach: run a script to assign the "already redirected" 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->user_login ))
- {
- return $redirect_to;
- }
- //新增一個欄位來記錄登入次數
- $key_name ='redirect_on_first_login';
- $current_redirect_value = get_user_meta( $user->ID, $key_name,true);
- if( strtotime( $user->user_registered )>( time()- $message_period )
- &&(''== $current_redirect_value || intval( $current_redirect_value )< $num_redirects )
- )
- {
- if(''!= $current_redirect_value )
- {
- $num_redirects = intval( $current_redirect_value )+1;
- }
- update_user_meta( $user->ID, $key_name, $num_redirects );
- return $redirect_url;
- }
- else
- {
- return $redirect_to;
- }
- }
- add_filter('login_redirect','redirectOnFirstLogin',10,3);
使用自定義欄位來儲存登入次數,如果使用者註冊時間小於指定時間 (比如 48 小時),且欄位的數值小於指定次數,就重定向!