Intereting Posts
Предельная контактная форма 7 крючок для конкретной формы SQL, чтобы проверить, сколько сайтов пользователь является членом Изменение описания bloginfo из плагина Как скрыть определенные ящики таксономии от пользователей в админе, добавить страницу сообщения? Ошибка HTTP при попытке загрузить изображение вставить изображение с настраиваемым типом сообщения Сообщения CPT в раскрывающемся списке в мета-окне на странице не возвращают идентификатор сообщения Как установить ограничение на слайдер Любые инструменты для быстрого захвата комментариев / комментариев? Динамический URL-адрес, а не физическая страница в базе данных Отображение формы входа с помощью Shortcode Как перенести результаты поиска на определенную страницу? Пользовательская структура константной ссылки с% postname% перед именем домена Расширенные пользовательские поля и анализ ключевых слов SEO Yoast Не могу понять, почему файл jquery не загружается!

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

У меня есть многоузловая сеть с 250 сайтами. Я хотел бы иметь возможность копировать пользователей с назначенной им ролью с основного сайта в сети до подсайтов. Вот как я попытался это сделать:

functions.php

add_action('wp','add_current_user_to_site',10); function add_current_user_to_site() { if(!is_user_logged_in()) { return false; } $current_user = wp_get_current_user(); $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog(1); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } 

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

Это лучший способ настроить копирование пользователя и добавление его в подсайты? Есть ли способ разрешить это при посещении входа напрямую, вместо того, чтобы сначала посетить сайт?

Вы можете использовать следующую функцию, чтобы скопировать всех пользователей на весь дочерний узел. Сначала он получает все идентификаторы пользователей и идентификаторы подсайтов, затем он перебирает все сайты и пользователей, чтобы назначить всех пользователей на каждый дочерний узел. Вот обновленный код-

 add_action('wp','the_dramatist_add_current_user_to_site'); function the_dramatist_add_current_user_to_site() { global $wpdb; $all_users = $wpdb->get_col( 'SELECT ID FROM $wpdb->users' ); $subsites = get_sites(); foreach( $subsites as $subsite ) { $subsite_id = get_object_vars($subsite)['blog_id']; foreach ( $all_users as $current_user) { $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog($subsite_id); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } } } 

Надеюсь, что это поможет.

Используя другой предоставленный ответ, похоже, существует два способа скопировать пользователей с назначенными ролями с основного сайта на субсайты в многосайтовой сети WordPress.

Он может быть настроен либо на добавление текущего пользователя или всех пользователей с сайта (я выбрал основной сайт сети, blog_id=1 ) на дочерний сайт, когда они посещают страницу.

Вот как это сделать, выберите один и добавьте functions.php :

Добавьте только пользователя на каждый дополнительный сайт

 function add_current_user_to_site() { if(!is_user_logged_in()) { return false; } $current_user = wp_get_current_user(); $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog(1); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } add_action('wp','add_current_user_to_site'); 

Добавить всех пользователей на каждый дополнительный сайт

 function add_all_users_to_site() { if(!is_user_logged_in()) { return false; } $users = get_users('blog_id=1'); $sites = get_sites(); foreach ($sites as $site) { foreach ($users as $user) { $blog_id = get_current_blog_id(); $user_id = ($user->ID); switch_to_blog($site->id); $get_role = ($user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } } } add_action('wp','add_all_users_to_site'); - function add_all_users_to_site() { if(!is_user_logged_in()) { return false; } $users = get_users('blog_id=1'); $sites = get_sites(); foreach ($sites as $site) { foreach ($users as $user) { $blog_id = get_current_blog_id(); $user_id = ($user->ID); switch_to_blog($site->id); $get_role = ($user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } } } add_action('wp','add_all_users_to_site');