Wordpress WPMU Согласованность входа в систему в многосайтовой сети

Я работаю над многосайтовой установкой 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 ответ

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

Так работает мультисайт. Все пользователи автоматически включаются как 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;
}
Другие вопросы по тегам