對於已經開放註冊的 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 小時),且字段的數值小於指定次數,就重定向!