Функция is_super_admin()
используется для определения, является ли указанный пользователь супер-администратором мультисайтовой сети WordPress. Супер-администратор — это пользователь с максимальными правами доступа в сети сайтов, который может управлять всеми сайтами, создавать новые сайты, удалять пользователей и настраивать общие параметры сети.
is_super_admin( int|false $user_id = false ): bool
Параметры
- $user_id (число | false) (необязательный) — ID пользователя, которого нужно проверить. Если параметр не указан, проверяется текущий пользователь. По умолчанию —
false
.
Возвращаемое значение
- bool —
true
, если пользователь является супер-администратором, иfalse
— в противном случае.
Особенности
- Если мультисайтовая сеть не используется, функция будет работать аналогично, проверяя, является ли пользователь администратором с максимальными правами, например, может ли он удалять других пользователей (право
delete_users
). - В версии WordPress 4.8 было рекомендовано вместо этой функции использовать проверку на возможность выполнения действия
setup_network
, однако функцияis_super_admin()
продолжает работать.
Пример 1: Проверка текущего пользователя на статус супер-администратора
Вы можете проверить, является ли текущий пользователь супер-администратором мультисайтовой сети, и вывести сообщение для него:
global $user_ID;
if ( is_super_admin( $user_ID ) ) {
echo "Здравствуйте, главный администратор сети!";
}
Пример 2: Удаление меню для обычных пользователей
Допустим, вам нужно убрать меню редактирования записей для всех пользователей, кроме супер-администраторов:
if ( ! is_super_admin() ) {
add_action( 'admin_init', 'wpdocs_remove_edit_menu' );
}
function wpdocs_remove_edit_menu() {
remove_menu_page( 'edit.php' );
}
В этом примере функция remove_menu_page
удаляет ссылку на редактирование записей для всех пользователей, кроме супер-администраторов.
Пример 3: Отображение хуков только для супер-администраторов
Иногда бывает полезно отображать информацию о хуках и событиях только для супер-администраторов, чтобы они могли проводить отладку:
if ( is_super_admin() ) {
$debug_tags = array();
add_action( 'all', function ( $tag ) {
global $debug_tags;
if ( in_array( $tag, $debug_tags ) ) {
return;
}
echo "<pre>" . $tag . "</pre>";
$debug_tags[] = $tag;
} );
}
тот код выведет все активные хуки для супер-администраторов, что может быть полезно для отладки.
Альтернативный подход
Начиная с WordPress 4.8, вместо is_super_admin()
рекомендуется использовать проверку возможности выполнения действия setup_network
, так как это считается более гибким способом проверки прав супер-администратора:
if ( current_user_can( 'setup_network' ) ) {
// Выполнить нужные действия для супер-администратора.
}
Этот способ более безопасен и совместим с будущими версиями WordPress.
Рекомендации
- Не рекомендуется использовать функцию
is_super_admin()
в новых проектах, если есть возможность проверять права черезcurrent_user_can()
. - Использование данной функции подходит для мультисайтовой среды WordPress, где важно разграничивать права супер-администраторов и обычных администраторов сайтов.
Заключение
Функция is_super_admin()
остается полезным инструментом для управления правами доступа в сетевой среде WordPress, особенно в старых версиях или при поддержке существующих проектов.