2017-02-22 1 views
1

Ich verwende die WordPress walker class, um eine Vorlage Teil nach einem Menü li, aber es fügt die Vorlage Teile über die gesamte Menüstruktur. Hier ist, was ich habeVorlage Teil nicht nach Menüelement

class bt_menu_walker extends Walker_Nav_Menu 
{ 
    public function end_el(&$output, $item, $depth = 0, $args = array()) { 
     $dir = get_template_directory() . '/partials'; 
     // Get file names from 'partials' directory 
     $scan = scandir($dir); 
     // Get css class names from menu elements 
     $classes = empty($item->classes) ? array() : (array) $item->classes; 
     foreach($scan as $file) { 
      // Only grab files 
      if (!is_dir("$file")) { 
       // Just raw filenames 
       $strip_extension = pathinfo($file, PATHINFO_FILENAME); 
       // Match css class with filenames 
       if ($classes[0] == $strip_extension) { 
        // Append template part after closing </li> 
        $output .= "</li>" . get_template_part('partials/' . $strip_extension); 
       } 
      } 
     } 
    } 
} 

Wie ich es getestet habe, wenn ich andere html $output anhängen zeigt es direkt nach dem Schließen </li> Element wie erwartet. Warum rendert der get_template_part über der Menüstruktur?

Antwort

0

Da die Vorlage Teile Echo direkt an den Browser ausgeben und das Menü ist in $ Ausgabe und wird später outputed. (`S wahrscheinlich wirklich schlechtes Englisch)

Schalten Sie die Ausgabe-Pufferung der Ausgabe des Schablonenteil zu erhalten:

if ($classes[0] == $strip_extension) { 
    // Append template part after closing </li> 
    $output .= "</li>"; 
    ob_start(); 
    get_template_part('partials/' . $strip_extension); 
    $output .= ob_get_clean(); 
} 

ob_start() und ob_get_clean() zur Erläuterung See.


Übrigens. Ein <ul> Element sollte nur <li> Elemente enthalten. Vielleicht ist dies nicht der beste Ort für Ihre zusätzliche Ausgabe.

Verwandte Themen