• Приветствую, друзья!

    Как мы все, надеюсь, знаем в WordPress Multisite можно делать каждому подсайту своих пользователей.

    Вопрос: как решить, казалось бы, тривиальную задачу: не пускать авторизованного пользователя на тот подсайт, где он не зарегистрирован..

    Задача частично реализована следующим кодом:

    /* Переадресация, если пользователь не авторизован */
    if ( is_user_logged_in() ) : else :
    
    	$refreshlocation = "Location:http://www.mainwpnetworksite.com/#login";
    	header($refreshlocation);
    
    endif;

    Но он пока не пускает всех не авторизованых пользователей..нужно не пускать еще тех, чьи аккаунтов нет именно в этом подсайте. Надеюсь, доходчиво объяснил.. Всем заранее спасибо!!! =)

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Должно быть как-то так, попробуй:

    if(is_user_logged_in()) {
    global $current_user;
      $blogs = get_blogs_of_user( $current_user->id );
         if($blogs) {
         	 foreach ( $blogs as $blog ) {
             wp_redirect( home_url() ); //Можно просто удалить это перенаправление
    	}
         } else {
         $refreshlocation = "Location:http://www.mainwpnetworksite.com/#login";
    	header($refreshlocation);
         }
    }

    Спасибо. Опробуем!

    Пока не совсем получается что-то..

    Как нам узнать, является ли тот или иной юзер привязанным к мультисайту или нет? Где мы это узнаем в вашем коде? Спасибо!

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    if ( is_user_logged_in() ) {
    	$blogs = get_blogs_of_user( get_current_user_id() );
    	if ( ! $blogs || ! in_array( get_current_blog_id(), array_keys( $blogs ) ) )
    		wp_die( 'У вас нет доступа к этому сайту.' );
    } else {
    	/* Переадресация, если пользователь не авторизован */
    	header( 'Location: http://www.mainwpnetworksite.com/#login' );
    }

    Спасибо всем за помощь! Сергей, ваш вариант не пробовал, на то время, благодаря Кулбину, писал уже свой вариант. Все работает:

    if(is_user_logged_in()) {
    
    	if ( ! is_admin() ) {
    
    		global $current_user;
    		$nowurl = str_replace("http://", "", get_bloginfo('url'));
    		$blogs = get_blogs_of_user( $current_user->id );
    		foreach ( $blogs as $blog ) {
    			$userhassite = $blog->domain;
    			if($userhassite == $nowurl ) { $goaway = "no"; }
    		}
    		if($goaway == "no") {} else {
    			$refreshlocation = "Location:http://www.mainwpnetworksite.com/";
    			header($refreshlocation);
    		}
    
    	} else {
    		 /// из админки никого выбрасывать не будем...
    	}
    
    } else {
        $refreshlocation = "Location:http://www.mainwpnetworksite.com/#login";
    	header($refreshlocation);
    }

    Что скажете, господа?

    Не важно, что проверять параметр у пользователя или урл его сайтов. Если условие работает правильно — вполне можно и последний вариант оставить.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Не пускать пользователя на чужой подсайт» закрыта для новых ответов.