Как получить страницу отдельной категории wp_nav_menu для выделения родителя? - PullRequest
0 голосов
/ 12 июня 2019

С новой системой wp_nav_menu можно добавить категорию в качестве элемента меню, поэтому в моем примере у меня есть категория «новости», которая является элементом подменю «О программе».

О программе(страница)

- новости (категория)

- история (страница)

- свяжитесь с нами (страница)

Меню с подсветкой CSSполучает данные от current-menu-parent и current-menu-ancestor, поэтому, когда я нахожусь в разделе подменю, элемент меню верхнего уровня (например, «О программе») выделяется при посещении «news».

Это прекрасно работает, за исключением случаев, когда я посещаю пост в категории «новости», который соответствует is_single () и in_category («новости»).

Насколько я могу видеть в Firebug, 'current-menu-parent 'и' current-menu-ancestor 'применяются к элементу меню' news ', однако они не применяются к элементу меню верхнего уровня' About '.

Есть ли что-то, что яотсутствует в настройке моего меню?Я пытался использовать пользовательский Walker, однако кажется, что предки начального меню не были настроены должным образом?

Кажется, мое единственное решение (без использования неприятного хака JQuery) - создать 'новость''страница, которая запрашивает сообщения новостей, а не указывает на категорию новостей.

Есть идеи?

Спасибо, Дан

Обновление с примером кода 09/09 /2010

Как сейчас, просматривая одну страницу в категории Новости http://www.example.com/2010/09/top-news-did-you-know/:

О нас

<li id="menu-item-71" class="menu-item menu-item-type-taxonomy"><a href="http://www.example.com/category/events/">Events</a></li>

<li id="menu-item-70" class="menu-item menu-item-type-taxonomy current-post-ancestor current-menu-parent current-post-parent current-menu-parent"><a href="http://www.example.com/category/news/">News &#038; views</a></li>

<li id="menu-item-88" class="menu-item menu-item-type-post_type"><a href="http://www.example.com/contact-us/">Contact Us</a></li>

Итак, вы видите, что у "About Us" нет класса CSS, чтобы указывать, что он является родителем просматриваемой в данный момент страницы.

Как мне кажется, это должно бытьработать (и, честно говоря, если этого не сделать, то это ошибка из-за отсутствия реализации):

О нас

<li id="menu-item-71" class="menu-item menu-item-type-taxonomy"><a href="http://www.example.com/category/events/">Events</a></li>

<li id="menu-item-70" class="menu-item menu-item-type-taxonomy current-post-ancestor current-menu-parent current-post-parent current-menu-parent"><a href="http://www.example.com/category/news/">News &#038; views</a></li>

<li id="menu-item-88" class="menu-item menu-item-type-post_type"><a href="http://www.example.com/contact-us/">Contact Us</a></li>

Имеется родительский элемент current-menu current-родительский current_page_parent current_page_ancestor классы CSSперейдите к пункту меню верхнего уровня.Это работает таким образом для любой другой страницы, или даже при просмотре самой категории, только ни одной страницы в категории.

1 Ответ

1 голос
/ 12 июня 2019

У меня тоже была такая же проблема.Я не смог найти php-хак, поэтому я использовал javascript:

function findAncestor(){
    var currentParentLi = document.getElementsByClassName("current-menu-parent");
    if(currentParentLi){
        var currentAncestorLi = currentParentLi[0].parentNode.parentNode;
        if(currentAncestorLi && currentAncestorLi.tagName=="LI"){
            currentAncestorLi.className += " current-menu-ancestor";
        }
    }
}

Поместите приведенный выше код в файл .js, затем сделайте ссылку на него в заголовке вашей страницы и вызовите findAncestor ()функция для window.onload, то есть:

<script type="text/javascript">
<!--
window.onload = function() {
    findAncestor()
}
//-->
</script>
...