跨多站点自动登录用户

时间:2016-09-28 作者:user1049961

在我的多站点安装上创建新站点时,我会自动将新用户添加到主站点(因为我需要他订购产品):

add_user_to_blog( 1, $user_id, \'customer\' );
我想让用户自动登录到他们所有的网站,只要他们登录到他们所属的其中一个网站。

我希望能钓到wp_login 动作,只需设置auth_cookie 对于用户所属的每个站点,大致如下:

add_action(\'wp_login\',\'autologin\');
function autologin($user_login, $user) {
   $user_blogs = get_blogs_of_user($user->ID);
   foreach ($blogs as $blog) {
     switch_to_blog($blog->blog_id);
     wp_set_current_user ( $user->ID );
     wp_set_auth_cookie  ( $user->ID);
     restore_current_blog();
   }
}
但这行不通。是否有解决方法?

1 个回复
SO网友:bueltge

您可以将每个用户自动添加到网络中的每个博客。例如,使用下面的简单函数将用户id添加到博客id。如果您循环所有站点并将用户添加到每个具有角色的博客。

function join_site( $user_id = 0, $blog_id = 0, $role = \'editor\' ) {

    if ( 0 === $user_id )
        return false;

    if ( 0 === $blog_id )
        return false;

    if ( ! is_user_logged_in() )
        return false;

    if ( ! is_user_member_of_blog( $user_id, $blog_id ) )
        add_user_to_blog( $blog_id, $current_user->ID, $role );
}
您可以在用户注册或登录上运行此功能。在寄存器上的性能较小,注册后只有一个请求,而不是每次登录。但是,如果用户是插件的一部分,该函数会在is_user_member_of_blog().

好处是,每个用户都是博客的真实部分,可能有不同的角色。结果是,你有所有的可能性,也有其他插件来运行用户的功能。

对于登录,应设置常量以定义始终相同的cookie。

define( \'COOKIE_DOMAIN\', \'\' );

如果用户被添加到站点,则用户可以登录网络的每个站点。有关此上下文的更多信息,请参阅this q/a.

相关推荐

有没有办法让客户在不调用wp-login.php的情况下注销?

我正在使用woo commerce。注销URL不同,其中包括“customer logout”。实际上,它再次重定向到“wp登录”。php’使注销过程成功。我的问题是,当Woo commerce不调用“wp登录”时。php’用于登录,为什么它需要注销?我知道,至少5年来,这一问题已经被问了好几次,但没有直接的答案。我正在管理区使用htaccess密码锁。使用此功能,任何新/现有客户都可以注册和登录,而不会出现任何问题。但是,当客户注销时,由于wp登录。php被调用,它要求htaccess用户名和密码。这意