Как добавить активное состояние для навигационных ссылок?

13 янв. 2015 г., 19:45:11
Просмотры: 14.4K
Голосов: 0

Я пытаюсь добавить активные состояния для моего кастомного меню навигации, но пока ничего не работает. Я создал файл меню 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-код, который я пробую, не работает с кастомными меню.

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

Не хватает много кода, настолько неполный, вау - пожалуйста, отредактируйте вопрос, чтобы мы могли помочь. Удачи.

skim- skim-
13 янв. 2015 г. 19:48:42

Просто как совет, когда вы добавляете код в редактор, выделите ваш код и нажмите на значок {} над редактором. Это добавит ваш код в виде блока кода :-)

Pieter Goosen Pieter Goosen
13 янв. 2015 г. 20:03:15

Вам нужно сделать $thisPage глобальной, если вы собираетесь ссылаться на неё в других файлах, см. область видимости переменных в php. Вообще лучше избегать делать что-либо глобальным, если можно этого избежать. Вероятно, лучше использовать встроенные инструменты WordPress для меню, как предложено в ответе @Dan.

Andrew Bartel Andrew Bartel
13 янв. 2015 г. 20:23:57

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

Steven Donea Steven Donea
15 янв. 2015 г. 22:32:21
Все ответы на вопрос 4
4

Если ваша тема использует функцию wp_nav_menu(), то к соответствующему элементу <li> автоматически будет добавлен класс current-menu-item. Помогает ли это?

13 янв. 2015 г. 19:51:06
Комментарии

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

Steven Donea Steven Donea
13 янв. 2015 г. 20:23:23

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

Dan Dan
14 янв. 2015 г. 14:39:08

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

Steven Donea Steven Donea
15 янв. 2015 г. 02:19:52

Вам, скорее всего, потребуется изменить CSS-селекторы, чтобы они работали с HTML, который генерирует WordPress. Обычно элемент <ul> имеет класс "menu", а не идентификатор, как в вашем примере кода.

Dan Dan
15 янв. 2015 г. 11:38:44
0

Я бы поступил так: удалил весь код, который у вас сейчас в nav.php для отображения меню, создал меню через админку WordPress, и тогда вы сможете использовать CSS-класс .current-menu-item.

Тогда для вывода меню вам понадобится всего лишь wp_nav_menu();

Вот документация по этой функции:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

14 янв. 2015 г. 06:52:28
0

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

Однако это очень плохая практика. Лучшим решением будет создание меню непосредственно в WordPress и его подключение к вашему шаблону. WordPress хорошо документирует как это сделать.

15 янв. 2015 г. 08:13:49
0

Я удалил файл 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.

16 янв. 2015 г. 03:12:45