Проверьте, есть ли в пунктах меню wp nav подменю


Я хочу вывести следующую разметку для меню через wp_nav_menu,

<ul>
        <li><a href="/">Home</a></li>
        <li>
            <a href="/" aria-haspopup="true">Blog</a>
            <ul>
                <li><a href="/">Design</a></li>
                <li><a href="/">HTML</a></li>
                <li><a href="/">CSS</a></li>
                <li><a href="/">JavaScript</a></li>
            </ul>
        </li>
</ul>

Пункты меню могут иметь подменю - в этом случае ссылка верхнего уровня должна быть отформатирована как в приведенном выше примере. Я пробовал разные решения, изучая кодекс, но безуспешно. Похоже, мне нужно будет создать для этого ходок, если только я не захочу добавить кучу запросов (запуск циклов подменю внутри основного цикла). Но поскольку это такое небольшое изменение, не было бы можно ли вместо этого добавить крючок фильтра в вывод меню?

Author: Staffan Estberg, 2014-07-14

1 answers

Если я правильно понимаю, вы хотите, чтобы ссылки с подменю имели атрибут aria-haspopup. Если это правильно, вы должны быть в состоянии сделать это с помощью фильтра nav_menu_link_attributes (WP 3.6 и выше). Вы также можете обойти необходимость написания пользовательского ходока, чтобы проверить, есть ли у элемента дочерние элементы, проверив его классы css в фильтре.

add_filter( 'nav_menu_link_attributes', 'wpse154485_add_aria_haspopup_atts', 10, 3 );
function wpse154485_add_aria_haspopup_atts( $atts, $item, $args ) {
  if (in_array('menu-item-has-children', $item->classes)) {
    $atts['aria-haspopup'] = 'true';
  }
  return $atts;
}
 8
Author: nothingtosee, 2014-07-14 11:16:59