Custom Walker: Wie bekomme ich ID in der function start_lvl?

Ich mache meinen ersten Custom Walker, um ein Akkordeonmenü zu bauen. Am Anfang habe ich dieses Beispiel benutzt: http://bitacre.com/2025/custom-nav-menu-walker-for-wordpress-themes

Es gibt zwei functionen. Zuerst start_lvl und dann start_el.

In start_el wird die ID durch $ item-> ID implementiert. Weiß jemand, wie ich das auch in start_lvl machen kann? Ich muss der (unteren Navigationsebene) eine ID geben, damit ich sie im Akkordeonmenü auslösen kann.

Was ich zu generieren versuche, ist etwa so:

Titel 2 
    Lower Level Menu 2
Titel 3
    Lower Level Menu 3

Mein Code für die function start_lvl:

 // add id's and classes to ul sub-menus function start_lvl( &$output, $depth, $item ) { // depth dependent classes $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $pgid = ; // How to get ID in here?? $classes = array( 'sub-menu', ( $display_depth == 1 ? 'accordion-body collapse' : '' ), ( $display_depth % 2 ? 'menu-odd' : 'menu-even' ), ( $display_depth >=2 ? 'sub-sub-menu' : '' ), 'menu-depth-' . $display_depth ); $ids = array( 'collapse' . $pgid ); $class_names = implode( ' ', $classes ); $id_name = implode( ' ', $ids ); // build html $output .= "\n" . $indent . '
    ' . "\n"; }

Solutions Collecting From Web of "Custom Walker: Wie bekomme ich ID in der function start_lvl?"

Ich musste dies nur in einem meiner Themen tun … Da Sie in dieser Phase des Walker keinen Zugriff auf die $ item-Variable haben, möchten Sie Ihr aktuelles Element in einem globaleren Bereich speichern habe Zugang dazu. Der folgende Code wird mehr Sinn machen … Hinweis: Ich habe alles außer dem relevanten Code entfernt.

 class ThemeTruck_Nav_Walker extends Walker_Nav_Menu { private $curItem; // retrieve the curItem function start_lvl(&$output, $depth = 0, $args = array()) { var_dump($this->curItem ); } // store the curItem function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { $this->curItem = $item; } } 

Ich hatte ein ähnliches Problem und triggerse es mit einer statischen Variablen innerhalb der class:

 static protected $menu_lvl; 

Und dann habe ich im “display_element” die Variable inkrementiert:

 self::$menu_lvl++; 

In meinem Code habe ich dann in der start_lvl-function etwa so referenziert:

 $output .= "
    ";

Dies verwendet nicht die Seiten-ID, aber es verwendet eine eindeutige ID für UL-statementen, auf die das JavaScript verweisen kann.

BTW – Dies ist wirklich nur nützlich für verschachtelte Akkordeons oder anklickbare verschachtelte Dropdowns im Roots Theme mit Bootstrap für mobile Apps.

Sie können den folgenden Filter in Ihrer start_el function verwenden und Ihr Argument in der start_lvl function start_lvl .

 apply_filters( 'walker_nav_menu_start_lvl', $item_output, $item, $depth, $args->myarg=$item->title ); 

Bitte lass es mich wissen, wenn es funktioniert.

Sie können dem Argument des Custom Walker einfach $ page hinzufügen:

 class My_Custom_Walker extends Walker_page { function start_el(&$output, $page, $depth, $args, $current_page) { if ( $depth ) $indent = str_repeat("\t", $depth); else $indent = ''; extract($args, EXTR_SKIP); $output .= $indent . '
  • ' . $link_before . apply_filters( 'the_title', $page->post_title, $page->ID ) . $link_after . '';
  • Probieren Sie die obigen Schritte aus, und fügen Sie dann die benutzerdefinierte Walker-class hinzu, bevor Sie wp_list_pages () aufrufen:

     $MyWalker = new My_Custom_Walker(); 

    Dann in den Argumenten für wp_list_pages:

    wp_list_pages (‘walker’ => $ MyWalker)

    Überprüfen Sie, ob die Ausgabe des Rollators rot ist.