it-swarm.xyz

Как добавить активный класс на текущей странице пункта меню?

У меня есть две ссылки: Продукты и Новости.

Когда я нажимаю "Продукты" или "Новости", он возвращает мне страницу архива, содержащую некоторые сообщения, а когда я нажимаю на сообщение, он возвращает мне одну страницу этого сообщения.

В меню я использую этот код на <li>, чтобы добавить класс с именем active, если страница домашняя:

<li<?php if(is_home()) {?> class="active"<?php } ?>>

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

Если я использую if( is_archive() || is_single() ), он добавит класс в оба меню.

Некоторая помощь будет оценена.

3
Ramon Vasconcelos

Вы можете добавить условные классы для каждого в файле функций вашей дочерней темы:

Вот один пример, который вы можете изменить в соответствии со своими потребностями.

add_filter('nav_menu_css_class' , 'wpsites_nav_class' , 10 , 2);

function wpsites_nav_class($classes, $item){

if( is_archive() && $item->title == "Products"){     

         $classes[] = "products-class";
 }
 return $classes;

Источник http://codex.wordpress.org/Function_Reference/wp_nav_menu#Adding_Conditional_Classes_to_Menu_Items

Затем вы можете оформить свое навигационное меню, используя новый класс в файле style.css дочерних тем.

.products-class {

Your CSS declarations
}

Этот код CSS является условным на основе приведенного выше кода PHP.

3
Brad Dalton

Я предполагаю, что ваши сообщения Products и News являются пользовательскими.
Для обоих условных тегов существует $post_type-специфичный эквивалент:

if (is_post_type_archive('products')) {
   // ...
} elseif (is_post_type_archive(array('news', 'something'))) {
   // ...
} elseif (is_singular('products')) {
   // ...
} elseif (is_singular(array('news', 'something'))) {
   // ...
}

Итак, для Продукты это будет:

if (is_post_type_archive('products') || is_singular('products'))

Новости соответственно.

Ссылки:

0
tfrommen