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

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.

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

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


Комментариев нет

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

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

*

*

*