Как войти один раз во всю сеть WordPress Multisite
Кто-нибудь знает хороший плагин, который позволяет войти один раз как Super Admin в сети WP-MS и переключаться между сайтами без необходимости повторного входа в каждую сеть и/или каждый сайт индивидуально?
Спасибо

Это связано с доменом cookie. Он устанавливается для каждого домена, что предотвращает вход в систему для всей сети. Вы можете попробовать установить константу COOKIE_DOMAIN
в вашем файле wp-config.php
.
Например, установка пустого значения, что предотвращает изменение WordPress домена cookie для каждого сайта:
define( 'COOKIE_DOMAIN', '' );
Возможно, вам также потребуется установить некоторые другие константы, чтобы это заработало.
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '' );
define( 'SITECOOKIEPATH', '' );
Не спрашивайте меня о недостатках, потому что я не совсем уверен в этом.
Или вы можете установить один конкретный домен cookie для всех сайтов:
define( 'COOKIE_DOMAIN', 'example.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
Вероятно, также будет хорошей идеей установить уникальный хэш cookie:
define( 'COOKIEHASH', 'unique_cookie_hash_string' );
На случай, если у вас есть другие установки WordPress, использующие тот же домен для cookie.
Обновление:
Из страницы GitHub плагина WP Multi Network я получил это:
Единый вход
Добавьте что-то подобное в ваш
wp-config.php
, чтобы использовать общие cookie на всех сайтах и сетях.
// Cookies
define( 'COOKIEHASH', md5( 'yourdomain.com' ) );
define( 'COOKIE_DOMAIN', 'yourdomain.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
define( 'TEST_COOKIE', 'thing_test_cookie' );
define( 'AUTH_COOKIE', 'thing_' . COOKIEHASH );
define( 'USER_COOKIE', 'thing_user_' . COOKIEHASH );
define( 'PASS_COOKIE', 'thing_pass_' . COOKIEHASH );
define( 'SECURE_AUTH_COOKIE', 'thing_sec_' . COOKIEHASH );
define( 'LOGGED_IN_COOKIE', 'thing_logged_in' . COOKIEHASH );
Судя по всему, это общие настройки WordPress, а не специфичные для плагина, так что стоит попробовать. Возможно, мы сделали недостаточно.

Это не сработало, @ialocin. Я вошел в свою основную сеть WP Core/Base. Затем, когда я переключился на другую сеть, мне снова показали экран входа.

Жаль, я добавил дополнительную информацию в свой ответ. Надеюсь, это поможет, потому что иначе лично я больше ничего не могу вам сказать. Остальное вам придется пробовать и исследовать самостоятельно. @tammy

Тест #1 (код ниже) -- это не сработало. Я успешно вошел в основную/главную сеть как Супер Администратор. Затем при переключении на другую сеть мне снова показали экран входа.
define('COOKIE_DOMAIN', '');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

Тест #2 (код ниже) -- это тоже не сработало. Я успешно вошел в основную/главную сеть как Супер Администратор. Затем при переключении на другую сеть мне снова показали экран входа.
define('COOKIE_DOMAIN', 'my-main-wp-network-site.com');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');

Возможно, мне стоит создать собственный плагин для реализации этой функциональности.

Сделаю, @ialocin. Я дам вам знать, когда плагин будет написан и протестирован. Сейчас это не в приоритете, поэтому может занять несколько недель.

это две разные сети WP? Или одна сеть сайтов, работающих на одной кодовой базе?

В настоящее время у меня более десятка сетей, каждая с одним сайтом внутри, @AlexOlder. Супер-админ имеет доступ к каждой сети в моей установке WP. Поэтому я просто хочу входить в WP один раз — то есть для всех сетей сегодня, завтра и в будущем. Надеюсь, это проясняет ситуацию.

@tammy это не так. Если у вас есть дюжина разных сетевых настроек, то нет безопасного и надежного способа войти во все из них одновременно.
Если это дюжина сайтов на одной установке WP, то при входе вы должны быть авторизованы в рамках одной сети.

Именно так @AlexOlder -- отсюда и необходимость написать мой собственный плагин. Спасибо. Если вы напишете это как ответ... я выберу его, чтобы закрыть эту ветку.

@tammy это не так. Если у вас есть десяток разных настроек сети, то не существует безопасного и надежного способа войти во все из них одновременно. Если это десяток сайтов на одной установке WordPress, то при входе вы должны быть авторизованы в рамках одной сети.
– Алекс Олдер 5 августа в 10:35

Начиная с WordPress 4.2.4, при стандартной мультисайтовой установке с плагином MU Domain Mapping 0.5.5 Development и плагином Multisite User Management 1.1, вход через основной домен авторизует пользователя на всех сайтах, к которым он привязан (на всех сайтах как суперадминистратор). Однако пользователь должен посетить дочерний сайт, чтобы установить cookie и авторизацию, что произойдет автоматически. К счастью, можно добавить обходное решение для выхода пользователя со всех сайтов, если он посещал дочерний сайт во время авторизации на основном домене. В настоящее время по умолчанию выход не происходит со всех сайтов. Вот что можно добавить в файл functions.php вашей темы, чтобы уничтожить сессии пользователя во всей сети при выходе:
function clear_session_on_logout() {
$current_user = wp_get_current_user();
// получаем все сессии для пользователя с ID $user_id
$sessions = WP_Session_Tokens::get_instance($current_user->ID);
// получили сессии — уничтожаем их все!
$sessions->destroy_all();
}
add_action('clear_auth_cookie', 'clear_session_on_logout');
Также рекомендуется обновить тему для всей сети или темы, используемые на дочерних сайтах, чтобы вход и выход происходили через wp-admin/ основного домена. Однако если требуется, чтобы пользователь выходил с каждого дочернего сайта «в случае посещения» во время авторизации на основном домене, то стандартного хука выхода будет достаточно.
Для справки: если вы входите на дочерний сайт под учетной записью суперадминистратора, это не приведет к автоматическому входу на все сайты. Думаю, это сделано намеренно, и легко исправляется модификацией темы, чтобы вход и выход всегда использовали основной домен. Если же предпочтительнее перенаправлять обратно на дочерний домен при входе и выходе, можно также реализовать простой хук для этого.

Также я обнаружил раздражающую особенность в стандартном выпадающем меню "Мои сайты" в wp-admin панели: оно перенаправляет вас в wp-admin/ дочернего сайта, что заставляет любого пользователя (включая супер-администратора) снова авторизовываться на дочернем сайте, даже если он уже авторизован на основном домене (странно). Если вы посетите любую другую страницу, кроме директории wp-admin/ дочернего сайта, пользователь будет авторизован автоматически, и административная панель появится. Простое решение для wp-admin панели — изменить ссылки в выпадающем меню, чтобы они вели к site_url(); дочернего сайта.
