Пользовательские типы записей 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 );