Активные пункты меню для пользовательских типов записей WordPress

Пользовательские типы записей WordPress очень замечательный и гибкий инструмент, но иногда возникают затруднения, как сделать ссылку на архив записей активной находясь на странице записи?

Есть меню вида:

В настройках:

Трудность заключается ещё в том, что если указана страница записей (тип post),  то к ней в меню добавляется класс .current-menu-item, даже если находится на странице архива произвольного типа записей.

Перед непосредственным решением, поискал существующие, плагины в расчёт не брались. Самое близкое и работоспособное — Активное меню для произвольного типа записи в WordPress, но оно не устроило, из-за необходимости вводить slug пользовательского типа записи.

Исключая этот момент и желание сделать универсальное решение, получилось следующее (необходимо вставить в файл functions.php вашей темы):

function add_parent_url_menu_class( $classes = array(), $item = false ) {
  // Текущий URL
  $current_url = get_permalink($post->ID);

  // Главная страница
  $homepage_url = get_home_url();

  // Исключаем 404 и Главную страницу
  if( is_404() or $item->url == $homepage_url )
    return $classes;

  if ( is_post_type_archive() || is_single($post->ID) ) // Проверка архива кастомного типа записей или страницы записи
  {
    unset($classes[array_search('current_page_parent',$classes)]);
    if ( isset($item->url) )
      if ( strstr( $current_url, $item->url) )
        $classes[] = 'current-menu-item';
  }
  return $classes;
}

add_filter( 'nav_menu_css_class', 'add_parent_url_menu_class', 10, 3 );

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

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