2016-05-30 41 views
2

我想建立一個WordPress多站點以下功能安裝:計數用戶博客此前Worpdress登錄重定向

  • 在登錄執行一個用戶(少主的一員博客的數量Wordpress站點)被計數,然後 -
  • 如果用戶是多個站點的成員,他們將被定向到一個網關頁面,在那裏他們可以選擇他們想要訪問的站點。
  • 如果用戶只有一個站點的成員,那麼他們會直接重定向到該站點。

我寫了下面的代碼,它在一定程度上起作用。當用戶登錄時,他們當前被定向到他們的主要博客,如果他們再次登錄(即使他們已經登錄),他們將被重定向到網關,這表明博客的數量在初始登錄時不起作用。有沒有人對我如何解決這個問題有任何建議?

/*Redirect After Login on front end*/ 
function primary_login_redirect($redirect_to, $request_redirect_to, $user) 
{ 
    if ($user->ID != 0) 
    { 
     $user_info = get_current_user_id(); 
     //Get number of blogs from user 
     //$blogs = get_blogs_of_user($user_info); 
     // if($blogs > 1) { 

     $user_blogs = get_blogs_of_user($user_info); 
     $result = count($user_blogs); 

     if ($result > 1){ 
      $primary_url = 'https://xxxyyyzzz.com/gateway-page/'; 
      if ($primary_url) { 
       wp_redirect($primary_url); 
       die(); 
      } 
     } else { 
      $user_info = get_userdata($user->ID); 
      if ($user_info->primary_blog) { 
       $primary_url = get_blogaddress_by_id($user_info->primary_blog) . 'home/'; 
       if ($primary_url) { 
        wp_redirect($primary_url); 
        die(); 
       } 
      } 
     } 

     return $redirect_to; 
    } 
} 

add_filter('login_redirect','primary_login_redirect', 100, 3); 
+0

'if(($ result - 「1」)>「1」){'< - 這是你的問題。如果用戶有2個博客,則不會通過。另外你用字符串混合整數,堅持一種類型。我想也許你打算使用'if($ result> 1){'? – Jeemusu

+0

感謝您的輸入,您對整數正確但恐怕仍然無效,博客似乎不會被計入登錄,我更新了代碼以反映您的更改 – user1419810

+0

在這種情況下你需要開始調試。在$ user_blogs變量聲明之後執行'print_r($ user_blogs); die();'。然後登錄並查看您是否獲得了預期的輸出。 – Jeemusu

回答

1

問題似乎是get_current_user_id()在登錄過程的這個階段沒有返回結果。

而不是使用get_current_user_id()方法,請嘗試訪問傳遞給方法的參數$user的ID。

if ($user->ID != 0) 
{ 
    $userBlogs = get_blogs_of_user($user->ID); 
    $numBlogs = count($userBlogs); 
} 

你可以重構你的代碼,使它更具可讀性。

function primary_login_redirect($redirect_to, $request_redirect_to, $user) 
{ 
    if ($user->ID != 0) 
    { 
     $userBlogs = get_blogs_of_user($user->ID); 
     $numBlogs = count($userBlogs); 

     if ($numBlogs > 1) { 
      wp_redirect('https://xxxyyyzzz.com/gateway-page/'); 
      die(); 
     } 

     if ($user->primary_blog) { 
      $url = get_blogaddress_by_id($user->primary_blog) . 'home/'; 
      wp_redirect($url); 
      die(); 
     } 

     return $redirect_to; 
    } 
} 
+0

這樣做對於重構來說非常感謝,它確實使得事情變得更清晰和更具可讀性。 – user1419810

0

試試這個

<?php 
function primary_login_redirect($redirect_to, $request_redirect_to, $user) 
{ 
    if ($user->ID != 0) 
    { 
     $user_info = get_current_user_id(); 
     //Get number of blogs from user 
     //$blogs = get_blogs_of_user($user_info); 
     // if($blogs > 1) { 

     //$user_blogs = get_blogs_of_user($user_info); 
     $result = count(get_posts(array("post_type" => "post", "posts_per_page" => -1, "author" => $user_info))); 

     if ($result > 1){ 
      $primary_url = 'https://xxxyyyzzz.com/gateway-page/'; 
      if ($primary_url) { 
       wp_redirect($primary_url); 
       die(); 
      } 
     } else { 
      $user_info = get_userdata($user->ID); 
      if ($user_info->primary_blog) { 
       $primary_url = get_blogaddress_by_id($user_info->primary_blog) . 'home/'; 
       if ($primary_url) { 
        wp_redirect($primary_url); 
        die(); 
       } 
      } 
     } 

     return $redirect_to; 
    } 
} 

add_filter('login_redirect','primary_login_redirect', 100, 3); 
?> 

至於我檢查 echo json_encode(get_blogs_of_user(1)); // 1 is admin

它只返回

{"1":{"userblog_id":1,"blogname":"WOO","domain":"","path":"","site_id":1,"siteurl":"http:\/\/localhost\/wp","archived":0,"spam":0,"deleted":0}} 

你的代碼將永遠給1。所以計數習慣更好。

祝你好運。