
🔑 Кнопка входа и выхода в меню WordPress: 2 рабочих способа
Нужна кнопка «Войти» в меню, которая сама превращается в «Выйти» после авторизации? Задача встречается на каждом втором сайте с регистрацией: форумы, интернет-магазины, LMS, membership-порталы, даже блоги с комментаторами.
Раньше её закрывал плагин baw-login-logout-menu. В июне 2025 автор запросил удаление из каталога WordPress.org, плагин не обновлялся 9 лет, использовал удалённую из PHP 8 функцию create_function и содержал XSS-уязвимость. На практике два сайта из трёх, где мы его встречали, уже переехали на современные решения.
Ниже два рабочих способа, которые делают ровно то же самое: быстро через плагин и полностью своим кодом. Оба проверены на актуальных версиях WordPress и PHP.
💡 Быстрый обзор:
- Поставьте плагин Login Logout Menu, перетащите пункт в меню и настройте редиректы.
- Добавьте фильтр wp_nav_menu_items в functions.php дочерней темы для полного контроля.
- Подключите иконки Font Awesome через Better Font Awesome или строкой wp_enqueue_style.
Способ 1: плагин Login Logout Menu, быстро и без кода
Современная замена умершему baw-login-logout-menu, плагин Login Logout Menu от WPBrigade. Версия 1.5.2, совместим с WordPress 6.9 и PHP 8.3. В отличие от предшественника, не требует шаманства с #bawloginout# в поле URL, всё работает через родной интерфейс меню.

Установите через Плагины → Добавить новый, введите в поиске login-logout-menu. После активации откройте Внешний вид → Меню. В левой колонке появится блок Login/Logout/Register/Profile с шестью пунктами. Самый ходовой, Login | Logout: он автоматически показывает «Войти» гостю и «Выйти» авторизованному.
Перетащите его в нужное меню. Разверните добавленный пункт и пропишите URL для редиректа после логина и после выхода. Оставьте поля пустыми, пользователь останется на той же странице. Укажите /my-account/, после входа попадёт в личный кабинет.
Плагин добавляет также пункты «Register», «Profile», «Username» и «Reset Password». Они опциональны, но для membership-сайта профиль и регистрация в меню уместны.
- Плюсы: ноль кода, настройка за минуту, работает с любым блоковым и классическим меню.
- Минусы: ещё один плагин в админке. Для 90% сайтов это не проблема.
- Цена: бесплатно, скачать на WordPress.org.
Способ 2: фильтр wp_nav_menu_items, полный контроль над разметкой
Не хотите ставить плагин ради одной кнопки, задача решается фильтром wp_nav_menu_items. Код добавляется в functions.php дочерней темы или через плагин Code Snippets. В основной теме файл перезатрётся при обновлении.
Добавьте в functions.php дочерней темы:
1 /** 2 * Добавляет кнопку входа/выхода в указанное меню. 3 */ 4 add_filter( 'wp_nav_menu_items', 'sdstudio_add_loginout_link', 10, 2 ); 5 6 function sdstudio_add_loginout_link( $items, $args ) { 7 // Замените 'primary' на slug вашего меню 8 if ( 'primary' !== $args->theme_location ) { 9 return $items; 10 } 11 12 if ( is_user_logged_in() ) { 13 $link = '<li class="menu-item menu-item-logout">'; 14 $link .= '<a href="' . wp_logout_url( home_url() ) . '">Выйти</a>'; 15 $link .= '</li>'; 16 } else { 17 $link = '<li class="menu-item menu-item-login">'; 18 $link .= '<a href="' . wp_login_url( get_permalink() ) . '">Войти</a>'; 19 $link .= '</li>'; 20 } 21 22 return $items . $link; 23 }
Фильтр wp_nav_menu_items срабатывает при выводе каждого меню. Проверка theme_location нужна, чтобы кнопка появилась только в одном месте, а не во всех меню сразу. is_user_logged_in() определяет статус: true для авторизованного, false для гостя. Функции wp_login_url() и wp_logout_url() отдают корректные URL с nonce-токеном, безопаснее, чем жёстко прописанная /wp-login.php.

После добавления кода в меню появится текстовая ссылка «Войти» или «Выйти». Без дополнительных стилей она наследует оформление темы.

- Плюсы: ноль плагинов, полный контроль над HTML и CSS.
- Минусы: нужно знать
theme_locationменю. Если не знаете, откройтеheader.phpтемы, найдите вызовwp_nav_menu()и посмотрите параметрtheme_location. Чаще всего этоprimary,headerилиmain. - Цена: бесплатно, код ваш.
Бонус: иконки Font Awesome для кнопок входа и выхода
Текстовые «Войти» и «Выйти» работают, но кнопка с иконкой заметнее. Самый простой путь, плагин Better Font Awesome (200 000+ установок). Установите, активируйте, иконки доступны сразу, плагин сам подтягивает свежую версию.
Для кодового метода добавим иконки FA 6 прямо в разметку фильтра:
1 if ( is_user_logged_in() ) { 2 $link = '<li class="menu-item menu-item-logout">'; 3 $link .= '<a href="' . wp_logout_url( home_url() ) . '">'; 4 $link .= '<i class="fa-solid fa-right-from-bracket" aria-hidden="true"></i> Выйти'; 5 $link .= '</a></li>'; 6 } else { 7 $link = '<li class="menu-item menu-item-login">'; 8 $link .= '<a href="' . wp_login_url( get_permalink() ) . '">'; 9 $link .= '<i class="fa-solid fa-user" aria-hidden="true"></i> Войти'; 10 $link .= '</a></li>'; 11 }
Классы fa-solid fa-user и fa-solid fa-right-from-bracket, актуальный синтаксис Font Awesome 6. Старые fa fa-user / fa fa-sign-out работают по инерции, но на свежих сборках могут не отобразиться.
Если не хотите ставить отдельный плагин для иконок, подключите FA одной строкой в functions.php:
1 add_action( 'wp_enqueue_scripts', function() { 2 wp_enqueue_style( 3 'font-awesome', 4 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.0/css/all.min.css' 5 ); 6 });
Настройка редиректов после логина и логаута
Оба способа по умолчанию возвращают пользователя туда же, где он был. Но иногда нужно другое: после логина, в личный кабинет, после выхода, на главную.

В плагине Login Logout Menu поля редиректа есть прямо в настройках пункта меню, разверните добавленный пункт и пропишите URL.
Для кодового метода wp_login_url() принимает параметр $redirect, URL, куда отправить после входа. wp_logout_url() работает так же:
1 $login_url = wp_login_url( home_url( '/my-account/' ) ); 2 $logout_url = wp_logout_url( home_url( '/' ) );
Если логика редиректов сложнее, разные страницы для разных ролей, отслеживание переходов, подключите Redirection. Два миллиона установок, рейтинг 4,5, практически стандарт индустрии для WordPress. Плагин не про кнопку входа, а про управление всеми редиректами: 301/302, отслеживание 404, импорт из CSV.

⁉️🤔 Частые вопросы
Можно ли сделать кнопку вообще без плагинов и без правки кода?
Да, но только в темах, где меню позволяет выбрать «Войти» из готового списка. Проверьте в Внешний вид → Меню вкладку «Произвольные ссылки»: в Astra, GeneratePress и Kadence такая опция есть. Если выпадающего списка нет, используйте способ 2 с фильтром. Он не сложнее замены ссылки.
Почему старый плагин baw-login-logout-menu пропал из каталога?
Автор запросил закрытие в июне 2025. Плагин не обновлялся 9 лет, использовал удалённую из PHP 8 функцию
create_functionи содержал XSS-уязвимость. Если он ещё стоит на сайте, удалите и замените на тот же Login Logout Menu: настройки не перенесутся, но сама кнопка настраивается заново за минуту.
Как сделать кнопку с иконкой и без отдельного плагина для иконок?
Подключите Font Awesome через
wp_enqueue_style(строка в бонус-секции выше) и добавьте тег<i>с нужным классом внутрь ссылки в фильтре. Иконкаfa-userдля входа,fa-right-from-bracketдля выхода. Стилизуйте через CSS-классыmenu-item-loginиmenu-item-logout.
Что если меню собирается в блочном редакторе (FSE)?
В блочных темах (Twenty Twenty-Four, Ollie) меню строится через редактор сайта, а не через классический Внешний вид → Меню. Плагин Login Logout Menu с блочным меню пока не работает. Используйте способ 2 с фильтром,
wp_nav_menu_itemsвызывается и в блочных темах, если меню рендерится через навигационный блок.
Безопасно ли тянуть Font Awesome с CDN на боевом сайте?
Cloudflare CDN для Font Awesome, один из самых надёжных публичных CDN, обслуживает миллиарды запросов в день. Если нужен полный контроль, скачайте только нужные иконки (
user,right-from-bracket) и загрузите в тему локально. Для большинства сайтов CDN-вариант проще и не создаёт проблем.
Что выбрать под вашу задачу?
Если на сайте есть регистрация, форум, магазин, LMS, membership-портал, кнопка входа и выхода в меню экономит пользователю клики и снижает отказы от «не нашёл как зайти».
Выбор между способами простой:
- Нужно быстро и без кода, ставьте этот плагин. Активно поддерживается, лёгкий, не конфликтует с темами.
- Хотите держать плагины под минимумом или нужна нестандартная вёрстка, берите фильтр
wp_nav_menu_items. Пять строк PHP, и кнопка выглядит ровно так, как задумано.
Для иконок Better Font Awesome покрывает большинство сценариев. Если плагин не ставите, одна строка wp_enqueue_style решает вопрос. Redirection подключайте, когда логика редиректов сложнее «после входа в кабинет, после выхода на главную», для простого случая хватает wp_login_url( $redirect ).
Оба способа проверены на темах Astra, GeneratePress, Kadence и стандартных темах WordPress. Пятнадцать минут, и кнопка в меню живёт своей жизнью: гостю «Войти», пользователю «Выйти».



