Поддержка Проблемы и решения Кастомное меню (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)» закрыта для новых ответов.