web-dev-qa-db-de.com

Der Themafilter von Wordpress nav_menu_css_class wird nicht aufgerufen

Ich habe Probleme, einen Filter zum Laufen zu bringen. Ich versuche, jedem <li> -Element eines Menüs eine Klasse hinzuzufügen. Dies ist in der functions.php Datei meines Themas:

/**
 * Adds custom classes to the items in the nav menu
 *
 * @param array $classes Classes for the body element.
 * @return array
 */
function nav_menu_item_classes( $classes, $item, $args, $depth ) {

    // This is what I used to check that it's not working
    error_log("is nav_menu_item_classes working?");

    if ( 'menu-1' === $args->theme_location ) {
        // Add the Bootstrap nav-item class
        $classes[] = 'nav-item';
    }

  return $classes;

}

add_filter( 'nav_menu_css_class', 'nav_menu_item_classes', 10, 4 );

So rufe ich das Menü in meiner header.php-Datei auf:

<?php
    wp_nav_menu( array(
        'theme_location' => 'menu-1',
        'menu_id'        => 'primary-menu',
        'menu_class'     => 'navbar-nav',
    ) );
?>

Alles scheint zu stimmen, aber der Filter wird nicht ausgeführt. Was könnte falsch sein?

1
José María

Der nav_menu_css_class Filter befindet sich in der start_el Funktion der WP Walker Klasse. Wie Sie in der Quelle sehen können, gibt es hier keine bedingte Ausführung. Sobald der Walker aufgerufen wird, muss der Filter angewendet werden.

Dies bringt uns zu wp_nav_menu , das den Walker (über einige Zwischenrufe) in der Zeile anruft, in der es heißt: $items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );. Wenn also irgendetwas den Aufruf des Filters verhindert, muss dies vor dieser Zeile geschehen. Eigentlich gibt es drei Möglichkeiten:

  1. Zuerst sehen Sie einen Filter namens wp_nav_menu_args . Wenn dies verwendet wird, kann ein benutzerdefinierter Walker hinzugefügt werden, der den Filter nicht aufruft.

  2. Zweitens gibt es den pre_wp_nav_menu Filter. Wenn dies verwendet wird, ist der Rest der Funktion kurzgeschlossen und erreicht den Geher nie.

  3. Wenn sich in Ihrem Menü keine Elemente befinden und kein Fallback definiert ist, wird der Walker ebenfalls übersprungen. Wenn ein Fallback vorliegt (möglicherweise mit wp_nav_menu_args hinzugefügt), wird die Ausgabe anstelle des Walkers erzeugt.

0
cjbj