2016-05-30 39 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。所以计数习惯更好。

祝你好运。