Добавление пунктов меню в коде

Настройка навигационного меню происходит в админке сайта работающего на WordPress.

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

Итак, добавление пункта меню осуществляется с использованием фильтра wp_nav_menu_items. Для этого в файле functions.php необходимо добавить следующий код.

add_filter('wp_nav_menu_items', 'my_add_menu_item_fn', 10, 2);
function my_add_menu_item_fn($items, $args) {
    if($args->theme_location == 'primary') {
        $items .= '<li><a href="">Текст ссылки</a></li>'
    }
    return $items;
}

Теперь пример из жизни.

Магазин с использованием плагина Woocommerce. Стоит задача, добавить в главное меню ссылку на страницу Регистрации, в случае если пользователь не вошел.  Когда пользователь залогинился под своей учетной записью, текст кнопки меняется и показывает имя пользователя.

Код выглядит следующим образом:

add_filter('wp_nav_menu_items', 'my_account_menu_item', 10, 2);
function my_account_menu_item($items, $args) {
   if($args->theme_location == 'primary') {
      if (!is_user_logged_in()) {
         $items .= '<li><a href="' . site_url('my-account') . '" style="background: #00aefc none repeat scroll 0 0; padding: 6px 12px;"><span class="fa fa-user"></span>' . __('Вход/Регистрация', 'synthetica') . '</a></li>';
      } else {
         $current_user = wp_get_current_user();
         $items .= '<li><a href="' . site_url( 'my-account/' ) . '"><span class="fa fa-user"></span>' . $current_user->user_firstname . ' ' . $current_user->user_lastname . '</a></li>';
      }
   }
   return $items;
}

Для добавление формы поиска добавьте следующий код в файл functions.php:

add_filter('wp_nav_menu_items','add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
    if( $args->theme_location == 'primary' )
    return $items."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
    return $items;
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *