2017-02-22 4 views
1

이라는 단어를 사용하여 메뉴 파트 li 다음에 템플릿 파트를 추가하지만 템플릿 파트를 전체 메뉴 구조 위에 삽입합니다. 여기에 내가 $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

템플릿 부분 출력은 브라우저에 직접 반영되므로 메뉴는 $ 출력에 있으며 나중에 출력됩니다.

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()를 참조하십시오 (영어 아마 정말 나쁜 that`s) 출력 버퍼링에

를 켜고는 템플릿 부분의 출력을 얻을 수 있습니다.


그건 그렇고. <ul> 요소는 <li> 요소 만 포함해야합니다. 어쩌면 이것이 여분의 출력을위한 최고의 장소가 아닐 수도 있습니다.