Skip to content

Всё для WordPress, веб-разработки — и не только

🔑 Кнопка входа и выхода в меню WordPress: 2 рабочих способа

🔑 Кнопка входа и выхода в меню 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, всё работает через родной интерфейс меню.

Настройка входа и выхода в меню WordPress через плагин

Установите через Плагины → Добавить новый, введите в поиске 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 */
4add_filter( 'wp_nav_menu_items', 'sdstudio_add_loginout_link', 10, 2 );
5
6function 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.

Кнопка входа в меню WordPress с иконкой

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

Кнопка выхода в меню WordPress с иконкой
  • Плюсы: ноль плагинов, полный контроль над HTML и CSS.
  • Минусы: нужно знать theme_location меню. Если не знаете, откройте header.php темы, найдите вызов wp_nav_menu() и посмотрите параметр theme_location. Чаще всего это primary, header или main.
  • Цена: бесплатно, код ваш.

Бонус: иконки Font Awesome для кнопок входа и выхода

Текстовые «Войти» и «Выйти» работают, но кнопка с иконкой заметнее. Самый простой путь, плагин Better Font Awesome (200 000+ установок). Установите, активируйте, иконки доступны сразу, плагин сам подтягивает свежую версию.

Для кодового метода добавим иконки FA 6 прямо в разметку фильтра:

1if ( 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:

1add_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

В плагине 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.

Панель управления редиректами Redirection в WordPress

⁉️🤔 Частые вопросы

Можно ли сделать кнопку вообще без плагинов и без правки кода?

Да, но только в темах, где меню позволяет выбрать «Войти» из готового списка. Проверьте в Внешний вид → Меню вкладку «Произвольные ссылки»: в 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. Пятнадцать минут, и кнопка в меню живёт своей жизнью: гостю «Войти», пользователю «Выйти».