14.09.2015

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

Настройка навигационного меню происходит в админке сайта работающего на 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;
}

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

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

This is Atomic

All the pages you see here are built with the sections & elements included with Atomic. Import any page or this entire site to your own Oxygen installation in one click.
GET OXYGEN
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram