it-swarm.com.de

start_lvl Wird im Nutzern walker_nav_menu ignoriert

Dies ist mein erstes Projekt mit WordPress und ich bin beim Versuch, einen benutzerdefinierten Walker für ein Footer-Menü zu erstellen, hängen geblieben.

Grundsätzlich möchte ich das Menü von der <ul> <li></li> </ul>-Struktur in eine <p> <span></span> </p>-Struktur ändern.

Das Menü und das Zeug zeigen Dateien an und ich konnte die Funktionen start_el und end_el ohne Probleme anpassen, so dass ich jetzt Folgendes bekomme:

<ul> <span>*link*</span> <span>*link*</span> </ul>

Was offensichtlich auf halbem Weg liegt, ich habe die Tags start_lvl() und end_lvl() wie unten gezeigt geschrieben, aber sie werden von WordPress ignoriert - nichts, was ich in sie geschrieben habe (sogar die()), wird ausgeführt (was ein bisschen verdächtig ist), aber ich weiß, dass die Klasse ist wird wegen der Funktion start_el() aufgerufen.

function start_lvl(&$output, $depth = 0, $args = array()) {
    $output = "\n<p class=\"sub-menu\">\n";
}

function end_lvl(&$output, $depth = 0, $args = array()) {
    $output .= "\n</p>\n";
}

Weiß jemand, warum das passiert - habe ich etwas wirklich Offensichtliches verpasst?

Ich verwende die neueste Version von WordPress unter Apache mit PHP 5.3.6, wenn es hilft.

Danke im Voraus,

Felix :)

8
fenfe1

Ihre Klasse my_extended_walker ist in Ordnung, aber wenn Sie die Funktion wp_nav_menu aufrufen, verwenden Sie den Parameter items_wrap .

wp_nav_menu( array( 'items_wrap' => '<p>%3$s</p>', 'walker'=>new my_extended_walker() ) );

Das start_lvl wird für untergeordnete Elemente verwendet.

8
stillatmylinux

Ok, ich bin mir nicht sicher, was ich falsch gelesen habe, als ich das gepostet habe, aber deine ganze Klasse sollte ungefähr so ​​aussehen:

class my_extended_walker extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\n<p class=\"sub-menu\">\n";
    }

    function end_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\n</p>\n";
    }
}

Und dann übergeben Sie den 'walker' als Parameter, wenn Sie wp_nav_menu aufrufen.

wp_nav_menu( array( 'walker'=>new my_extended_walker() ) );

Wenn du das hast, sollte es dir gut gehen. Ich schaue auf Arbeitscode, der genau das tut. Ich weiß allerdings nicht, wie ich <p> Tags einsetze. Möglicherweise erhalten Sie einen ungültigen Aufschlag.

3
s_ha_dum

Haben Sie darüber nachgedacht, alle Navigationsmenüpunkte mit der eingebauten Funktion abzurufen: wp_get_nav_menu_items(); und den Inhalt manuell auszugeben?

Beispiel :: Einfache Menüliste erstellen

    // Get the nav menu based on $menu_name (same as 'theme_location' or 'menu' arg to wp_nav_menu)
    // This code based on wp_nav_menu's code to get Menu ID from menu slug

    $menu_name = 'custom_menu_slug';

    if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

    $menu_items = wp_get_nav_menu_items($menu->term_id);

    $menu_list = '<ul id="menu-' . $menu_name . '">';

    foreach ( (array) $menu_items as $key => $menu_item ) {
        $title = $menu_item->title;
        $url = $menu_item->url;
        $menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
    }
    $menu_list .= '</ul>';
    } else {
    $menu_list = '<ul><li>Menu "' . $menu_name . '" not defined.</li></ul>';
    }
    // $menu_list now ready to output
2
Michael Ecklund