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

При запуске сообщества или форума на WordPress, а также при введении возможности отправки записей пользователями вы можете столкнуться с ситуацией, когда вам понадобится выводить разные навигационные меню для зарегистрированных и незарегистрированных пользователей. К примеру, можно сделать так, чтобы зарегистрированные пользователи видели ссылку на свой профиль, а незарегистрированные – ссылку на вход или регистрацию. В данной статье мы покажем вам, как вывести разные меню для пользователей WordPress.

Создание нескольких меню в WordPress

Даже если ваша тема поддерживает только одно расположение меню, вы все равно способны создавать разные меню для одной локации.

Переходим в раздел Внешний вид – Меню и создаем два меню logged-in и logged-out.

different-menus

После создания меню добавляем следующий код в файл вашей темы functions.php:

function my_wp_nav_menu_args( $args = '' ) {

if( is_user_logged_in() ) { 
	$args['menu'] = 'logged-in';
} else { 
	$args['menu'] = 'logged-out';
} 
	return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

Теперь зарегистрированные пользователи будут видеть одно меню, а незарегистрированные – другое.

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

Источник: wpbeginner.com

Блог про WordPress
Комментарии: 20
  1. Max

    Огромное спасибо! Работает.

  2. Илья

    У меня три РАЗНЫХ меню (верхнее, главное и меню в футере). Как мне сделать так, чтобы менялось только верхнее меню, а остальные остались прежними?

    1. Дмитрий (автор)

      В панели администратора в разделе Внешний вид — Меню. Выбираете нужное и настраиваете.

  3. Илья

    Как настраивать-то?

    1. Дмитрий (автор)

      Выбираете слева нужные пункты и перетаскиваете их в меню.

  4. Илья

    Я так и делаю! Но у меня эти изменения применяются ко всем областям меню, а не к одной!

    1. Дмитрий (автор)

      Видимо, у вас в теме прописано три области для одного и того же меню. Обычно в темах создают разные области меню под разные участки.

  5. Илья

    Дык, без Вашего кода я спокойно управляю ими по отдельности. Сами видите: http://ortodox-blog.besaba.com/

    1. Дмитрий (автор)

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

  6. Илья

    А расскажите, пожалуйста, поподробнее о способе с произвольными ссылками, упомянутом в конце статьи.

    1. Дмитрий (автор)

      Про это вот тут было написано: (англ.): http://www.wpbeginner.com/wp-themes/how-to-add-custom-items-to-specific-wordpress-menus/

      Подраздел: Adding Log in/out links to a Specific WordPress Menu

  7. Виталия

    Может кому пригодится, если нужно меню для зарегистрированных пользователей только в хедере. В header.php:

    ‘login menu’) );
    }
    else {
    wp_nav_menu(array(‘menu’ => ‘primary’));
    }
    ?>

  8. Виталия

    ‘login menu’) );}else {wp_nav_menu(array(‘menu’ => ‘primary’));}?>

    1. Дмитрий (автор)

      Лучше выкладывать в виде скриншота на imgur и кидать сюда ссылку.

  9. Виталия
    1. Дмитрий (автор)

      Спасибо!

  10. Нестор

    Здравствуйте!
    код работает как нужно, только изменилась сортировка записей
    было по три шт. горизонтально
    после добавления кода записи отображаются вертикально, заполняя треть пространства всего(слева)
    в чем может быть причина?

  11. Сева

    Хорошая статья, спасибо. Но есть проблема: новое меню дублируется в футере. У меня тема позволяет создавать кастомное меню в футере посредствам родного виджета. И в футере у меня стоит отдельное меню с отдельным названием, которое должно показываться как зарегистрированным пользователям так и нет. Задача стоит изменить только основное меню (вверху). Приведенный в статье код работает прекрасно, только почему-то он еще автоматически заменяет и универсальное меню в футере. То есть получается, что незарегистрированные пользоватлели видят два одинаковых меню..вверху и внизу. Меню в футере должно оставаться не тронутым. Может как-то можно прописать его идентификатор в исключения? Подскажите, как решить вопрос? Спасибо

  12. Dima

    А не подскажете код, который 2 разных меню будет отображать на главной и других страницах?

    1. Дмитрий (автор)

      Пробуйте плагином: https://wordpress.org/plugins/conditional-menus/

Добавить комментарий для Сева Отменить ответ

Получать новые комментарии по электронной почте.