WordPress: Различное меню для залогиненных и незалогиненных посетителей сайта

Недавно на одном из клиентских сайтов, нам пришлось делать навигационное меню, которое изменяется для зарегистрированного и незарегистрированного посетителя. Суть идеи заключается в следующем: если посетитель залогинился, ввел свой логин и пароль в форме авторизации на сайте, жмакнул кнопочку «войти», следовательно, мы ему подсунем одно меню, в противном же случае, подсунем совершенно другое.

Собственно таким нехитрым методом, мы даем ответ на вопрос:

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

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

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

Регистрируем два навигационных меню в wordpress, в файле functions.php:

register_nav_menus(array(
  'UserLoggedIn' => 'User menu logged in',
  'UserLoggedOut' => 'User menu logged out',
));
  1. User menu logged in – для залогиненных (зарегистрированных) посетителей сайта.
  2. User menu logged out – для незалогиненных (незарегистрированных) посетителей сайта.

Далее пишем функцию, которая будет выбирать, какое меню показывать зарегистрированным, а какое незарегистрированным:

function evgm_nav_menu_args($args = '') {
  if( is_user_logged_in() ) {
    $args['theme_location'] = 'UserLoggedIn';
  } else {
    $args['theme_location'] = 'UserLoggedOut';
  }
  return array_merge($args, $evgm_nav_menu_args);
}
add_filter('wp_nav_menu_args', 'evgm_nav_menu_args');

Вот и все, теперь в администраторском разделе cms wordpress: «Внешний вид»«Меню» → вкладка «Управления областями» у нас появятся две новые области расположения меню: «User menu logged in» и «User menu logged out».

Вывод навигационного меню в шаблоне сайта:

<nav>
  <?php
    if (has_nav_menu('primary_navigation')) :
      wp_nav_menu(array('theme_location' => 'primary_navigation'));
    endif;
  ?>
</nav>

Все вопросы пишите в комментариях к статье. :-)

Похожие заметки
Последние заметки
Если вам понравилась статья, вы можете подписаться на RSS или e-mail рассылку. Для получения обновлений по электронной почте, введите ваш e-mail адрес в эту форму (доставка от SmartResponder):

12 комментариев

  1. Леха,
    1

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

  2. Валерия,
    2

    Сперва не очень поняла, зачем так заморачиваться? Но, прочитав статью, решила попробовать. Теперь вот думаю что очень полезно будет на некоторых моих проектах иметь два разных меню, для разных типов пользователей.

  3. Анатолий Дропов,
    3

    Создаю сайт для набора форекс партнёров, каждому встречному давать материал не хочу, полезная статья, а вот можно ещё как-то ограничить регистрацию на моём сайте, чтобы я сам решал кого регистрировать?

  4. Евгений Москаленко,
    4

    Анатолий, можно конечно. Сделайте регистрацию по подтверждению администратором. Если пользователь подходит по критериям, то смело можно подтверждать его регистрацию.

    Я подумаю, как это реализовать на вордпресс и обязательно напишу пост о данной реализации. :-)

  5. Макс,
    5

    Есть еще вариант сделать меню через виджет и воспользоваться одним из плагинов для его отображения.

    Display widgets или Widget Context

    Второй плагин более гибкий.

    wp-admin.com.ua/display-widgets/

  6. Евгений Москаленко,
    6

    Дак, зачем же нагромождать сайт плагинами и виджетами, если есть решение из 18-ти строчек кода. :-)

  7. Антон,
    7

    Подскажите, плз, что делаю не так.

    В файл «function.php» добавил два куска кода из вашего сообщения. Получаю в меню:

    Warning: array_merge() [
    function.array-merge
    ]: Argument #2 is not an array in /home/gusfer/public_html/wp-content/themes/twentyeleven/functions.php on line 710

    Третий кусок (...) не знаю куда добавлять.

    Wordpres 4.01

  8. Евгений Москаленко,
    8

    1. Антон, ругается на строку 710 в файле «function.php». Надо смотреть что там за написано + детальненько проглядеть весь файлик.

    2. Третий кусок (...) не знаю куда добавлять.

    Код:

    <nav>
      <?php
        if (has_nav_menu('primary_navigation')) :
          wp_nav_menu(array('theme_location' => 'primary_navigation'));
        endif;
      ?>
    </nav>

    добавляем в то место, где должно выводиться наше меню. Этот код выводит меню, его добавляем в файлы шаблона, не «function.php»

  9. Антон,
    9

    Строка содежит следующий код из Вашего:

    return array_merge($args, $evgm_nav_menu_args);

  10. Елена,
    10

    Сейчас работаю над созданием сайта для привлечения партнеров. И сфокусирование на навигационном меню залогиненных и незалогиненных поситетелей для меня очень актуально. Буду отслеживать Ваши статьи.

  11. Евгений Москаленко,
    11

    Спасибо за отзыв, навигация на сайте — это очень важный момент, как в продвижении так и юзабильности сайта.

  12. Нестор,
    12

    Здравствуйте!

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

    было по три шт. горизонтально

    после добавления кода записи стали отображаться вертикально, заполняя треть пространства всего(слева)

    в чем может быть причина?

Оставить комментарий