Wordpress WPMU Согласованность входа в систему в многосайтовой сети - PullRequest
2 голосов
/ 20 марта 2012

Я работаю над многоузловой установкой WPMU, но столкнулась с крошечной проблемой.

Я создаю пользователя во время регистрации в моем основном домене. С чем-то вроде следующего.

$username = 'myname-'.time();
$user_id = wpmu_create_user($username,'anypassword','example@gmail.com');

add_user_to_blog(1, 5, 'subscriber');

$user = wp_signon(array(
"user_login" => $username,
"user_password" => 'anypassword',
"remember" => true
));

Что я делаю, это создаю пользователя, а затем назначаю его только первичному домену и регистрирую пользователя с помощью wp_signon. Тем не менее, при посещении дочернего сайта сети в поддомене, что очень сильно ограничивает доступ. Я все еще вошел в систему, и в верхней части меню панели инструментов все еще отображается.

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

Кто-нибудь сталкивался с этой проблемой раньше?

1 Ответ

1 голос
/ 19 ноября 2012

Да, у меня была эта проблема.И, если вам нужно специальное управление пользователями, вам нужно будет установить новую автономную (односайтовую) установку WordPress.

Так работает Multisite.Все пользователи автоматически включаются как subscribers всех сайтов в сети.

Из статьи Не используйте WordPress Multisite :

Если вам нужнопользователи, находящиеся на разных сайтах, но не знающие, что они находятся в сети, не используют MultiSite!Теперь, да, есть способы обойти это, однако для любой крупной компании это кошмар для аудита и риск для безопасности, о котором вы должны знать перед началом работы.

Этот плагин может помочь (но я не уверен): Управление несколькими пользователями .

Начиная с этого недавнего ответа Я дал на WordPress StackExchange некоторые полезные хаки:
(я проводил небольшие тесты в своей среде разработки, но, пожалуйста, тестируйте всесторонне)

/*
 * Redirect users that are not members of the current blog to the home page, 
 * if they try to access the profile page or dashboard 
 * (which they could, as they have subscriber privileges)
 * http://not-my-blog.example.com/wp-admin/profile.php
 */
add_action( 'admin_init', 'wpse_57206_admin_init' );

function wpse_57206_admin_init()
{
    if( !is_user_member_of_blog() ) 
    {
        wp_redirect( home_url() );
        exit();
    }
}


/*
 * Redirect users that are not members of the current blog to the home page, 
 * if they try to access the admin
 * http://not-my-blog.example.com/wp-admin/
 */
add_action( 'admin_page_access_denied', 'wpse_57206_access_denied' );

function wpse_57206_access_denied()
{
    wp_redirect( home_url() );
    exit();
}


/*
 * Redirect users that are not members of the current blog to the home page, 
 * if they try to login
 * http://not-my-blog.example.com/wp-login.php
 */
add_filter( 'login_redirect', 'wpse_57206_login_redirect' );

function wpse_57206_login_redirect( $url )
{
    global $user;
    if ( !is_user_member_of_blog() ) 
    {
        $url = home_url();
    }
    return $url;
}


/*
 * Hide the admin bar for users which are not members of the blog
 */
add_filter( 'show_admin_bar', 'wpse51831_hide_admin_bar' );

function wpse51831_hide_admin_bar( $bool )
{
    if( !is_user_member_of_blog() )
    {
        $bool = false;
    }
    return $bool;
}
...