Поддержка → Проблемы и решения → Кастомное меню (custom menu Walker)
Кастомное меню (custom menu Walker)
-
Добрый день!
Не нашел решения своей проблемы на форуме, прошу не закидывать помидорками, если плохо искал))
Нужно сделать главное меню на основе таблицы, а не стандартного списка ul.
Гугл подсказал, что можно решить эту проблему с помощью класса от товарища Matt’а (вот здесь тыц) с помощью модифицированного класса MV_Cleaner_Walker_Nav_Menu.
Вписал свою злосчастную таблицу:
<?php class MV_Cleaner_Walker_Nav_Menu extends Walker { var $tree_type = array( 'post_type', 'taxonomy', 'custom' ); var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' ); function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<table id=\"main_menu\"><tr>\n"; } function end_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "$indent</tr></table>\n"; } function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes = in_array( 'current-menu-item', $classes ) ? array( 'current-menu-item' ) : array(); $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = strlen( trim( $class_names ) ) > 0 ? ' class="' . esc_attr( $class_names ) . '"' : ''; $id = apply_filters( 'nav_menu_item_id', '', $item, $args ); $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . '<td>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $item_output = $args->before; $item_output .= '<a'. $attributes .'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } function end_el(&$output, $item, $depth) { $output .= "</td>\n"; } } ?>
Вывыожу например так:
<?php wp_nav_menu( array( 'walker' => new MV_Cleaner_Walker_Nav_Menu() ) ); ?>
А толку ноль. Сломал себе весь мозг, но как бы я не выводил меню, все равно не получается (((
Просмотр 1 ответа (всего 1)
-
Пока что решил проблему через \wp-includes\nav-menu.php (шаблон вывода меню). Это может не очень правильно, но зато действенно =)
Просмотр 1 ответа (всего 1)
- Тема «Кастомное меню (custom menu Walker)» закрыта для новых ответов.