В одном из своих проектов для WordPress столкнулся с непонятной проблемой при выводе меню. На одной из страниц сайта формировался рабочий стол, который задавался с помощью меню. Вся разработка проводилась локально на Denwer и все было чудесно до тех пор, пока не начался переезд на хостинг.
После переезда меню съехало и стало выводиться вместе со всем меню до заголовка страницы. Проблема была в классе, унаследованном от Walker_Nav_Menu. Спустя пару-тройку часов поисков хотя бы намека на причину решил сравнить два класса вывода меню. Разница была только в использовании буфера вывода.
Класс вывода меню, который не работал, использовал функции ob_start и ob_get_clean для формирования вывода. Заменив такой вывод на строки PHP все стало работать как часы.
Так не работает:
А так - работает:
После переезда меню съехало и стало выводиться вместе со всем меню до заголовка страницы. Проблема была в классе, унаследованном от Walker_Nav_Menu. Спустя пару-тройку часов поисков хотя бы намека на причину решил сравнить два класса вывода меню. Разница была только в использовании буфера вывода.
Класс вывода меню, который не работал, использовал функции ob_start и ob_get_clean для формирования вывода. Заменив такой вывод на строки PHP все стало работать как часы.
Так не работает:
class ls_dashboard_menu_walker extends Walker_Nav_Menu { public function start_lvl(&$output, $depth = 0, $args = array()) { if ($depth == 1): ob_start(); ?> <div class="row"> <!-- start row --> <?php $output .= ob_get_clean(); endif; }
А так - работает:
class ls_dashboard_menu_walker extends Walker_Nav_Menu { public function start_lvl(&$output, $depth = 0, $args = array()) { if ($depth == 1): $output .= '<div class="row">'; endif; }
Комментарии
Отправить комментарий