2017-12-21 4 views
0

ich die Kombination dieser beiden Codes Hilfe benötigen:Wordpress: nur die aktuelle Seite der obersten Ebene übergeordneten Untermenüpunkte aus einem benutzerdefinierten nav-Menü zeigt

dies:

<?php wp_nav_menu(
       array(
        'theme_location' => 'primary', 
        'container_class' => 'collapse navbar-collapse', 
        'container_id' => 'navbarNavDropdown', 
        'menu_class'  => 'navbar-nav', 
        'fallback_cb'  => '', 
        'menu_id'   => 'main-menu', 
        'walker'   => new rorentrep_WP_Bootstrap_Navwalker(), 
       ) 
      ); 
?> 

und diese (von https://www.minddevelopmentanddesign.com/blog/showing-current-pages-parents-sub-menu-items-custom-nav-menu-wordpress/):

<?php 
     $section_id = empty($post->ancestors) ? $post->ID : end($post->ancestors); 
     $locations = get_nav_menu_locations(); 
     $menu = wp_get_nav_menu_object($locations[ 'primary' ]); // 'primary' is our nav menu's name 
     $menu_items = wp_get_nav_menu_items($menu->term_id, array('post_parent' => $section_id)); 

      if(!empty($menu_items)) { 
       echo '<ul class="section-submenu">'; 
       foreach($menu_items as $menu_item) { 
       echo '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>'; 
      } 
      echo '</ul>'; 
      } 
?> 

Genauer gesagt, ich möchte die Links, dass der zweite Code echo als erster Code erscheint.

Die Struktur meiner Seiten sind wie folgt aus:

Business 
- Sub page a 
- Sub page b 
- Sub page c 

Private 
- Sub page x 
- Sub page y 
- Sub page z 

Jedes Mal, wenn ich ein Kind die Seite des Geschäfts besuchen ich das Menü nur Liste Sub Seite ac möchten, und wenn ich ein Kind die Seite von Privat besuchen Ich möchte das Menü, um nur die Unterseite xz aufzulisten.

Da mehrere Seiten hinzugefügt werden können, möchte ich nicht auf bestimmte Seiten-IDs abzielen.

Der Hauptgrund dafür ist, dass der Ausgabecode wie wp_nav_menu mit walker bootstrap nav (Hinzufügen von aktuellen Klassen zu nav-Elementen) umgebrochen und verschachtelt wird.

Antwort

0

In Ihrer Walker-Klasse können Sie das Verhalten für jede Ebene festlegen. Überprüfen Sie dann die Tiefe in der Elementmethode: start_el

class Footer extends \Walker_Nav_Menu 
{ 
    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) 
    { 
     if ($depth == 0) { 
     $output .= ' 
     <li class="list-inline-item"> 
      <a href="' . $item->url . '" title="' . $item->title . '"> 
      ' . $item->title . ' 
      </a> 
     </li>'; 
     } 
    } 
    function start_lvl(&$output, $depth = 0, $args = array()) { 
     $output.= ''; 
    } 
    function end_lvl(&$output, $depth = 0, $args = array()) { 
     $output.= ''; 
    } 
} 
Verwandte Themen