webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob wp_nav_menu-Elemente Untermenüs haben

Ich versuche, das folgende Markup für ein Menü über wp_nav_menu auszugeben.

<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>

Die Menüelemente können Untermenüs enthalten. In diesem Fall muss der Link der obersten Ebene wie im obigen Beispiel formatiert werden. Ich habe verschiedene Lösungen ausprobiert und den Kodex untersucht, aber ohne Erfolg. Es scheint, als müsste ich dafür einen Walker erstellen, es sei denn, ich möchte eine Reihe von Abfragen hinzufügen (Ausführen von Untermenü-Schleifen in einer Hauptschleife). Aber da es sich um eine so kleine Änderung handelt, wäre es nicht möglich, dem Menüausgang stattdessen einen Filter-Hook hinzuzufügen?

2
Staffan Estberg

Wenn ich das richtig verstehe, möchten Sie, dass Links mit Untermenüs das Attribut aria-haspopup haben. Wenn dies korrekt ist, sollten Sie in der Lage sein, dies mit dem nav_menu_link_attributes-Filter (WP 3.6 und höher) zu tun. Sie können auch die Notwendigkeit umgehen, einen benutzerdefinierten Walker schreiben zu müssen, um zu überprüfen, ob ein Element untergeordnete Elemente enthält, indem Sie seine CSS-Klassen im Filter überprüfen.

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
nothingtosee