Активные пункты меню в WordPress

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


WordPress своими алгоритмами создает верстку и классы. Нам надо вмешаться в процесс и подсказать, в каких случаях какие пункты оставлять активными.

Например, мы имеем:

  • Свой тип записей «Портфолио» в меню называется «Портфолио» (допустим, id=4);
  • Страница с постами находится в пункте меню «Блог» (допустим, id=1);
  • Если мы находимся в архиве записей «Портфолио», у нас подсвечивается пункт меню «Блог»;
  • Если мы находимся на подробной странице типа «Портфолио», у нас подсвечивается пункт меню «Блог»;

Нужно исправить:

  • Если мы в архиве или на подробной записи типа «Портфолио», то надо убрать подсветку пункта меню «Блог» (id=1, напомню);
  • Подсвечиваем пункт меню «Портфолио» (id=4), если мы в архиве записей этого типа, или на странице записи.

Решение:

if( !function_exists( 'global_navigation__active_classes' ) {
  function global_navigation__active_classes( $classes, $item ) {
  
    // Убирает активный класс у пункта меню "Страница записей" (id=1), если мы находимся на archive.php или single.php custom post_type="portfolio"
    if( ( is_post_type_archive( 'portfolio' ) || is_singular( 'portfolio' ) )  && $item->object_id == 1 ):
      $classes = array_diff( $classes, array( 'current_page_parent' ) );
    endif;

    // Добавляет активнвый класс к пункту меню с id=4, если мы находимся на archive.php или single.php custom post_type="portfolio"
    if( ( is_post_type_archive( 'portfolio' ) || is_singular( 'portfolio' ) ) && $item->object_id == 4 )
      $classes[]='current_page_parent';

    return $classes;
  }
  add_filter( 'nav_menu_css_class', 'global_navigation__active_classes', 10, 2 );
}

Код (разумеется, добавляем его в

functions.php

) будет запускаться при формировании связей пункта меню

$item

и принадлежащих ему классов

$classes

.

В первом случае мы убираем из массива с классами тот, который нам не нужен.

Во втором случае мы добавляем пункт

current_page_parent

в массив.

Оформляем стиль активного пункта на основе класса

current_page_parent

.

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

Пользуйтесь на здоровье и не теряйте времени на мелочи!


admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago