it-swarm.com.de

Wie werden 2 gleiche Spalten von li angezeigt, basierend auf der Anzahl der Elemente in wp_nav_menu geteilt durch 2?

Ich möchte ein benutzerdefiniertes 3.0-Menü in meiner Seitenleiste anzeigen. Ich möchte, dass die Liste in der Reihenfolge ihres Namens ist und die Liste in der Liste der linken Spalte fortlaufend nach unten und dann in die rechte Spalte fließt.

enter image description here

Ich verwende derzeit CSS und schwebe die Li, aber das Problem ist, dass die Liste von der linken zur rechten Spalte hin und her wechselt, anstatt die Liste nacheinander zu durchlaufen.

Ich benutze

<?php wp_nav_menu('menu=Canon-camcorders'); ?> in my sidebar.php

Dann #sidebar ul # menu-Canon-camcorder li.menu-item {width: 89px; Schwimmer: links; Rand rechts: 18px;}

Was ich tun möchte, ist zu zählen, wie viele Listenelemente es gibt, es dann in zwei zu teilen und zwei Ul daraus zu erstellen. Meine PHP-Fähigkeiten sind sozusagen ohne formelles Training zusammengeflickt, also bin ich irgendwie verloren. Ich kenne einige Fragen, aber ich weiß nicht, wie ich das machen soll.

Ich habe diesen Beitrag gelesen: Wie Navi Menüpunkte zählen? Aber ich konnte es nicht für meine Bedürfnisse herausfinden.

Jede Hilfe wird sehr geschätzt.

Danke, Larry

4
Larry4Design

Sie müssen Ihren eigenen benutzerdefinierten Walker registrieren, aber es ist ziemlich einfach, da Sie nur eine Funktion (start_el) im benutzerdefinierten Walker haben müssen.

Wir müssen den Code aus dem Thread, auf den Sie verwiesen haben, hinzufügen, um herauszufinden, wie viele Elemente es gibt, und dann die Hälfte herausfinden und die aktuelle Liste beenden, wenn dieser Wert erreicht ist, und einen anderen starten.

Ich bin nicht immer gut darin, diese Dinge zu erklären. Schauen Sie sich also zuerst diesen Wanderer an, den ich für Sie geschrieben habe. Es basiert auf dem Standard-Navigationsmenü, es gibt also nichts Besonderes, außer ein paar Zeilen hier und da, die klären, wann eine neue Liste erstellt werden muss.

class example_nav_walker extends Walker_Nav_Menu {

    var $current_menu = null;
    var $break_point  = null;

    function start_el(&$output, $item, $depth, $args) {

        global $wp_query;

        if( !isset( $this->current_menu ) )
            $this->current_menu = wp_get_nav_menu_object( $args->menu );

        if( !isset( $this->break_point ) )
            $this->break_point = ceil( $this->current_menu->count / 2 ) + 1;    

        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $classes[] = 'menu-item-' . $item->ID;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
        $class_names = ' class="' . esc_attr( $class_names ) . '"';

        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
        $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

        if( $this->break_point == $item->menu_order )
            $output .= $indent . '</li></ul><ul><li' . $id . $value . $class_names .'>';
        else
            $output .= $indent . '<li' . $id . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}

Ich erstelle zwei Variablen in der Klasse, der erste $current_menu enthält das Menüobjekt, und wir möchten nicht bei jeder Iteration eines Menüelements den Wert null abrufen, also gebe ich diesen einen Standardwert und rufe das Menüobjekt ab Wenn diese Variable nicht gesetzt ist, wird der Aufruf nur einmal ausgeführt. Die zweite Variable $break_point enthält den Haltepunkt, dh. Der Wert, den wir verwenden, um zu bestimmen, wann die aktuelle Liste beendet und eine andere Liste gestartet werden soll. Wir möchten dies nicht unnötigerweise bei jeder Iteration herausarbeiten, daher wird er nur für die Iteration des ersten Elements festgelegt.

Der Haltepunkt ist immer plus eins, da wir keinen herkömmlichen Zähler verwenden, der normalerweise am Ende einer Iteration inkrementiert wird (der Wert ist also höher als erwartet), und der Aufruf von ceil behandelt Fälle, in denen das Menü angezeigt wird hat eine ungerade Menge von Gegenständen, dh. Wenn Sie 9 Elemente hatten, würde es nach dem 5. eine neue Liste starten.

Grundsätzlich sind die einzigen benutzerdefinierten Teile dieses Laufwagens ..

    var $current_menu = null;
    var $break_point  = null;

..und das..

if( !isset( $this->current_menu ) )
    $this->current_menu = wp_get_nav_menu_object( $args->menu );

if( !isset( $this->break_point ) )
    $this->break_point = ceil( $this->current_menu->count / 2 ) + 1; 

..und schließlich das ..

if( $this->break_point == $item->menu_order )
    $output .= $indent . '</li></ul><ul><li' . $id . $value . $class_names .'>';
else
    $output .= $indent . '<li' . $id . $value . $class_names .'>';

Ich weise Sie darauf hin, damit Sie auf die wichtigen Teile achten können, ohne sich zu fragen, ob etwas anderes relevant ist.

Zuletzt müssen Sie Ihren wp_nav_menu-Aufruf festlegen, um einen benutzerdefinierten Walker zu verwenden. Dies bedeutet auch, dass Sie die args als Array übergeben müssen. Hier ein Beispiel.

<?php wp_nav_menu( array(
    'menu' => 'your-menu',
    'walker' => new example_nav_walker
) ); ?>

Sie können diesen Walker mit jedem beliebigen Menü verwenden. Vergewissern Sie sich bei der Verwendung lediglich, dass Sie dies wie oben gezeigt tun (Einstellen des Walkers und der Menüoptionen).

Das große Stück Code (der Walker) kann in die Funktionsdatei Ihres Themas eingehen. Wenn das für Sie am einfachsten ist, habe ich es auch dort getestet.

Ich hoffe, das hilft, und wenn Sie Fragen haben, lassen Sie es uns wissen.

11
t31os