
🔐 Кнопка входа и выхода в меню WordPress: пошаговое руководство 2026
Стандартный WordPress не умеет показывать кнопку «Войти» для незалогиненных посетителей и «Выйти» для авторизованных, в одном и том же месте меню. На первый взгляд мелочь. Но для сайта с личным кабинетом, членской зоной или форумом это базовая потребность, без которой навигация превращается в квест.
Раньше задачу закрывал плагин BAW Login/Logout Menu. Автор закрыл проект в 2025 году, и тысячи сайтов остались без обновлений. На смену пришёл прямой наследник, Login or Logout Menu Item с 20 000+ активных установок и рейтингом 4,8 на WordPress.org.
Собрали всё в одном руководстве: от установки плагина за две минуты до кастомных редиректов по ролям и отключения админ-бара для обычных пользователей.
💡 Быстрый обзор:
- Установите плагин Login or Logout Menu Item и настройте три поля редиректа
- Добавьте пункт «Login|Logout» в меню сайта через классический или блоковый редактор
- Настройте тонкую логику через сниппеты для functions.php: редирект по ролям, выход без подтверждения, замена wp-login.php
- Скройте админ-панель от обычных пользователей и заблокируйте им доступ к wp-admin
Метод 1: плагин Login or Logout Menu Item, быстро и без кода

Самый простой способ добавить динамическую кнопку входа и выхода, плагин Login or Logout Menu Item. Это прямой наследник BAW Login/Logout Menu, написанный с нуля одним из контрибьюторов оригинального проекта. На июнь 2026 года у плагина 20 000+ активных установок, 23 отзыва и оценка 4,8 звёзд. Версия 1.3.2 протестирована вплоть до WordPress 7.0.
Почему именно он, а не кодовое решение. Плагин не трогает functions.php и не ломается при смене темы. Он поддерживает блоковый редактор, пункт «Login|Logout» добавляется в Navigation block через обычный поиск. И у него отдельная страница настроек: никаких магических URL в полях меню, всё прозрачно.
Установка и настройка
Установите плагин стандартным путём: Plugins → Add New, введите Login or Logout Menu Item, нажмите Install и Activate. После активации в меню админки появится пункт Settings → Login or Logout. Три поля, вот что они означают:
- Login Page URL, адрес страницы входа. Для большинства сайтов достаточно
/wp-login.php. Если используете кастомную страницу входа (например/login/через MemberPress или WooCommerce), укажите её здесь. - Login Redirect URL, куда пользователь попадёт после входа. Обычно
/account/или просто/, на главную. Учтите: членские плагины вроде MemberPress или Restrict Content Pro могут переопределять этот редирект своими настройками. - Logout Redirect URL, куда отправить пользователя после выхода. Логично поставить
/или/wp-login.php.
Добавление пункта в меню
Зайдите в Appearance → Menus. В правом верхнем углу нажмите Screen Options и проверьте, что чекбокс Login/Logout включён. В левой колонке появится блок «Login/Logout», отметьте Login|Logout и нажмите Add to Menu.
Пункт меню появится в списке. Его URL должен оставаться #lolmiloginout#, это триггер плагина, не меняйте его. Navigation Label можно отредактировать: например «Войти | Выйти» или «Личный кабинет». Сохраните меню.
Если работаете с блоковым редактором (Appearance → Editor, блок Navigation): нажмите «+» для добавления ссылки, в поиске наберите «login» или «logout», выберите «Login|Logout» из подсказок. Ссылка добавится автоматически с правильным URL. Можно вписать и вручную, #lolmiloginout#.
Что делать, если меню не переключается
Самая частая причина, кеширование. Отключите кеш для залогиненных пользователей в настройках плагина кеширования: WP Rocket, Cloudflare APO, LiteSpeed. Вторая причина, другой плагин перехватывает редирект. Проверьте настройки членского или security-плагина: многие из них имеют собственные правила редиректа после логина, и они приоритетнее.
Метод 2: вход и выход через код в functions.php
Плагин закрывает большинство типовых сценариев. Но иногда нужна более тонкая логика: разный редирект для разных ролей, принудительный выход без подтверждения, скрытие админ-панели. Здесь на помощь приходит functions.php.
Весь код ниже добавляйте через плагин Code Snippets, это безопаснее, чем правка functions.php напрямую. Ошибка в синтаксисе не положит сайт, а просто отключит сниппет.
Вход с редиректом по роли пользователя
Этот код перенаправляет администраторов в админку, а всех остальных, на страницу личного кабинета. Добавьте его в Code Snippets или в functions.php дочерней темы.
1 /** 2 * Редирект после входа: админ → wp-admin, остальные → /account 3 */ 4 function sd_redirect_by_role( $url, $request, $user ) { 5 if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) { 6 if ( $user->has_cap( 'administrator' ) ) { 7 $url = admin_url(); 8 } else { 9 $url = home_url( '/account' ); 10 } 11 } 12 return $url; 13 } 14 add_filter( 'login_redirect', 'sd_redirect_by_role', 10, 3 );
Как это работает: фильтр login_redirect срабатывает в момент входа. Функция проверяет роль через has_cap('administrator') и подставляет нужный URL. Приоритет 10, стандартный, 3 ограничивает количество принимаемых аргументов. Если слаг вашей страницы кабинета отличается от /account, замените его в строке home_url('/account').
Выход из системы без подтверждения
По умолчанию WordPress при переходе по ссылке выхода показывает страницу подтверждения: «Вы уверены, что хотите выйти?» На мобильных устройствах это особенно раздражает. Вот код, который убирает подтверждение:
1 /** 2 * Выход без подтверждения, редирект на главную 3 */ 4 add_action( 'check_admin_referer', 'sd_logout_without_confirm', 10, 2 ); 5 function sd_logout_without_confirm( $action, $result ) { 6 if ( $action === 'log-out' && ! isset( $_GET['_wpnonce'] ) ) { 7 $redirect_to = isset( $_REQUEST['redirect_to'] ) 8 ? $_REQUEST['redirect_to'] 9 : home_url( '/' ); 10 $location = str_replace( '&', '&', wp_logout_url( $redirect_to ) ); 11 header( "Location: $location" ); 12 die; 13 } 14 }
Перед добавлением сделайте полный бэкап сайта. Функция перехватывает проверку nonce при выходе и сразу выполняет редирект, минуя страницу подтверждения. После установки проверьте: откройте ссылку ваш-домен/wp-login.php?action=logout в режиме инкогнито, вас должно выбросить на главную без промежуточного экрана.
Некоторые security-плагины (Wordfence, Solid Security) переопределяют поведение выхода. Если подтверждение осталось, отключите в их настройках опцию «подтверждение выхода» или добавьте URL /wp-login.php?action=logout в белый список.
Сценарий: своя страница входа вместо wp-login.php
Если вы заменили стандартную страницу входа кастомной (например через MemberPress или WooCommerce), нужно перенаправить прямой доступ к wp-login.php:
1 /** 2 * Замена wp-login.php на кастомную страницу входа 3 */ 4 add_action( 'init', 'sd_custom_login_page' ); 5 function sd_custom_login_page() { 6 global $pagenow; 7 if ( ! is_user_logged_in() && 'wp-login.php' === $pagenow ) { 8 wp_redirect( home_url( '/login' ) ); 9 exit; 10 } 11 }
Замените /login на слаг вашей страницы входа. Это полезно, когда вы используете плагин личного кабинета и не хотите светить стандартную форму WordPress.
Как скрыть админ-панель для всех, кроме администраторов
Админ-бар WordPress сверху сайта полезен только тем, кто управляет сайтом. Обычным пользователям он не нужен и визуально мешает, особенно если вы строите личный кабинет с чистым интерфейсом.
Отключение админ-бара через код
Добавьте в Code Snippets или functions.php дочерней темы:
1 /** 2 * Скрыть админ-бар для всех, кроме администраторов 3 */ 4 add_action( 'after_setup_theme', 'sd_remove_admin_bar_for_non_admins' ); 5 function sd_remove_admin_bar_for_non_admins() { 6 if ( ! current_user_can( 'administrator' ) && ! is_admin() ) { 7 show_admin_bar( false ); 8 } 9 }
Функция current_user_can('administrator') проверяет роль, а ! is_admin() гарантирует, что в самой админке бар останется, там он нужен всем, у кого есть доступ.
Блокировка доступа к wp-admin
Спрятать бар недостаточно. Нужно ещё и закрыть доступ к /wp-admin/ для тех, кому он не нужен:
1 /** 2 * Закрыть доступ к wp-admin для не-администраторов 3 */ 4 add_action( 'admin_init', 'sd_block_wp_admin_for_non_admins' ); 5 function sd_block_wp_admin_for_non_admins() { 6 if ( ! current_user_can( 'administrator' ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { 7 wp_redirect( home_url( '/restrict_user' ) ); 8 exit; 9 } 10 }
Условие DOING_AJAX критически важно: без него вы заблокируете AJAX-запросы от плагинов личного кабинета, которые пользователи должны выполнять из своего профиля. Страницу /restrict_user замените на любую страницу-заглушку, например, главную или страницу с сообщением «Доступ запрещён».
⁉️🤔 Частые вопросы
Плагин Login or Logout Menu Item не работает с PHP 8.0, что делать?
На WordPress.org есть один негативный отзыв о несовместимости с PHP 8.0 от января 2026 года. При этом плагин протестирован до WP 7.0, а 20 000+ активных установок подтверждают стабильную работу на современных версиях PHP. Если столкнулись с ошибкой: проверьте версию плагина (должна быть 1.3.2), отключите другие плагины редиректа, очистите кеш. На тестовом сайте с PHP 8.2 проблем не обнаружено.
Можно ли обойтись без плагина, только кодом?
Да. Метод 2 в этой статье полностью закрывает вход, выход и редиректы через
functions.php. Плагин удобнее: настройки из админки без правки файлов, поддержка блокового редактора, автообновления. Если сайт простой и нужна только кнопка входа и выхода, берите плагин. Если логика сложная: разные редиректы по ролям, несколько страниц входа, используйте код.
Что делать, если пункт меню не появляется в блоковом редакторе?
В Navigation block нажмите «+» и в поиске наберите «login» (не «lolmiloginout»). Если пункт не появляется, проверьте, что плагин активен и версия WordPress не ниже 6.0. Для старых тем без блокового редактора используйте классический интерфейс Appearance → Menus.
Как настроить редирект для разных ролей через плагин?
Login or Logout Menu Item не различает роли, он делает один редирект для всех пользователей. Для разного редиректа по ролям возьмите код из метода 2: функция
sd_redirect_by_roleработает даже если пункт меню добавлен через плагин. Фильтрlogin_redirectвыполняется после редиректа плагина и переопределяет его.
Почему страница подтверждения выхода всё равно показывается?
Некоторые security-плагины (Wordfence, Solid Security) переопределяют поведение выхода на своём уровне. Отключите в их настройках опцию подтверждения выхода либо добавьте URL выхода в белый список. Код из метода 2 срабатывает раньше большинства плагинов, но не всех, в редких случаях может потребоваться настройка самого security-плагина.
Чем WP-Recall отличается от Login or Logout Menu Item?
WP-Recall, это полноценный плагин личного кабинета: профили, личные сообщения, группы, commerce-модули. Вход и выход там встроены как часть экосистемы. Login or Logout Menu Item решает ровно одну задачу: динамическая кнопка входа-выхода в меню. Если вам нужен целый личный кабинет с множеством функций, смотрите в сторону WP-Recall или MemberPress. Если только кнопка в меню, Login or Logout Menu Item легче и не тянет за собой лишнего.
Что ставить на ваш сайт: плагин или код
Быстрое решение для типового сайта, плагин Login or Logout Menu Item. Поставили, заполнили три поля в Settings, добавили пункт в меню. Всё работает за пять минут. Двадцать тысяч активных установок и совместимость с WP 7.0 подтверждают: инструмент зрелый и поддерживаемый.
Если логика входа нетривиальная, разные редиректы для разных ролей, интеграция с членским плагином, кастомная страница входа, используйте код из метода 2. Он гибче, но требует осторожности. Пишите код через Code Snippets, а не напрямую в файл темы. Одна опечатка в functions.php, и сайт лежит.
Связка плагина для меню и кода для редиректов, компромисс, который мы используем на большинстве проектов. Плагин даёт удобное управление пунктом меню и поддержку блокового редактора. А кастомный код закрывает специфические требования по ролям и редиректам, не усложняя настройки плагина.
Выбирайте под свою задачу, а не под чужой чек-лист. Для простого сайта с членской зоной хватит плагина. Для маркетплейса или образовательной платформы, код обязателен. В любом случае, держите бекап перед правками и тестируйте на staging-копии.



