2017-02-22 13 views
1

という語句を使用してメニュー部分の後ろにテンプレート部分を追加しますが、メニュー部分全体にテンプレート部分を挿入しています。ここで私は私が$outputに他のHTMLを追加すると、期待どおり、それは閉じ</li>要素の直後に表示される、私はそれをテストしてきたようにメニュー要素の後にテンプレート部分が付加されない

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); 
       } 
      } 
     } 
    } 
} 

を持っているものです。 get_template_partがメニュー構造の上にレンダリングされるのはなぜですか?

答えて

0

テンプレートの出力はブラウザに直接出力されるので、メニューは$出力にあり、後で出力されます。 (英語おそらく本当に悪いthat`s)テンプレート部の出力を得るために、出力バッファリング上

入れます:

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()ob_get_clean()を参照してください。


ところで、 <ul>要素は、<li>要素のみを含める必要があります。たぶんこれは余分な出力のための最良の場所ではありません。

関連する問題