Как добавить активное состояние для навигационных ссылок?
Я пытаюсь добавить активные состояния для моего кастомного меню навигации, но пока ничего не работает. Я создал файл меню nav.php отдельно, а затем подключил его в header.php следующим образом:
<?php include('nav.php'); ?>
Я создал кастомные страницы WordPress в дочерней папке и подключил header.php сразу после названия шаблона:
<?php /* Название шаблона: Страница дизайна сайта*/
?>
<?php get_header(); ?>
Вот мой текущий HTML и PHP код в nav.php, где я добавил уникальный атрибут id "currentpage" для указания текущей страницы:
<ul id="menu" class="clearfix">
<li<?php if ($thisPage=="About")
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/about" title="Добро пожаловать" class="parent-link menu-item-2" id="main-menu-item-4">О нас</a></li>
<li<?php if ($thisPage=="Portfolio")
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/portfolio" class="parent-link menu-item-3">Портфолио</a></li>
<li<?php if ($thisPage=="Services")
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/services" class="parent-link menu-item-4">Услуги</a></li>
<li<?php if ($thisPage=="Prices")
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/prices" class="parent-link menu-item-5">Цены</a></li>
</ul>
И вот мой CSS для hover и активных состояний:
ul#menu li a:hover {
background-color: #999999;
color: #fff;
}
ul#menu li #currentpage a {
background: #fff;
color: #333;
}
Для каждой страницы я задал значение после названия шаблона, вот пример для главной страницы:
<?php /* Название шаблона: Страница дизайна сайта
*/
?>
<?php $thisPage="Home"; ?>
<?php get_header(); ?>
Надеюсь, кто-нибудь сможет помочь, я действительно не понимаю, почему этот код или любой другой PHP-код, который я пробую, не работает с кастомными меню.

Привет, Dan, это кастомное меню с идентификатором #menu, но я теперь изменил его на wp_nav_menu и также внес изменения в CSS. Должен ли я также удалить этот PHP-код из всех элементов li: <?php if ($thisPage=="About") echo " id=\"currentpage\""; ?>

Почему бы просто не использовать функцию wp_nav_menu()
вместо ручного создания меню?

Привет, Dan, ты прав насчет использования функции wp_nav_menu(), вместо того чтобы возиться с ручным созданием. Так что я вернул навигацию WordPress, и теперь у меня вот это: <div id="access" role="navigation"> <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?> </div> Теперь единственная проблема — это стилизация меню. Во-первых, я не могу заставить пункты меню выравниваться по правому краю.

Я бы поступил так: удалил весь код, который у вас сейчас в nav.php для отображения меню, создал меню через админку WordPress, и тогда вы сможете использовать CSS-класс .current-menu-item
.
Тогда для вывода меню вам понадобится всего лишь wp_nav_menu();
Вот документация по этой функции:

В вашем PHP-файле установите переменную $thisPage
перед тем, как подключите файл через include('nav.php');
. Тогда переменная $thisPage
будет передана в nav.php
и обработана в его условном операторе if
.
Однако это очень плохая практика. Лучшим решением будет создание меню непосредственно в WordPress и его подключение к вашему шаблону. WordPress хорошо документирует как это сделать.

Я удалил файл nav.php из своего header.php и вернул старый код меню, который идет с WordPress. Я добавил несколько хуков в свой style.css файл, чтобы настроить стили для желаемого дизайна и использовал только #menu-navmenu, который я создал в WordPress, чтобы выровнять меню по правому краю.
ul#menu-navmenu{float: right;}
Раньше у меня был такой стиль: ul#menu {float: right; margin: 15px;}
А теперь я добавил отступ 15px в этот код в файле style.css шаблона WordPress:
#access .menu-header ul,
div.menu ul {
list-style: none;
/*margin: 0;*/margin: 15px;
}
Все работает как ожидалось, и спасибо за всю вашу помощь в этом вопросе, это отличное сообщество WordPress.
