WordPress - отображать категории, дублировать родительский элемент и показывать как дочерний элемент, если есть дочерние элементы - PullRequest
0 голосов
/ 30 апреля 2018

У меня проблемы с настройкой Custom Walker.

Я пытаюсь создать аккордеонное меню, в котором первый родитель открывает дочерний список, который также, как родительский, повторяется, так что на него можно нажать.

Parent 1 - Parent 1 - Child 1 - Child 2 Parent 2 - Parent 2 - Child 1 - Child 2 - Child 3

Я огляделся переполнением стека, и это то, что я получил до сих пор.

    <ul>

        <?php

            class Walker_Simple_Example extends Walker_Category {


                // Configure the start of each element
                function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0) {

                    // Set the category name and slug as a variables for later use
                    $cat_name = esc_attr( $category->name );
                    $cat_name = apply_filters( 'list_cats', $cat_name, $category );
                    $cat_slug = esc_attr( $category->slug );

                    $haschildren = '';
                    if($args['has_children']) {
                        $haschildren = ' has-children';
                    }

                    // Configure the output for the top list element and its URL
                    if ( $depth === 0 ) {
                        $link = '<a class="parent-category-dropdown" href="' . esc_url( get_term_link($category) ) . '"' . '>' . $cat_name . '</a>';
                        $indent = str_repeat("\t", $depth);
                        $output .= "\t<li class='parent-category" . $haschildren . " " . $cat_slug . "'>$link\n<div class='category-dropdown'>\n<span class='parent-category-title'><a href='" . esc_url( get_term_link($category) ) . "'>" . $cat_name . "</a></span>\n$indent<ul class='submenu'>\n";
                    }

                    // Configure the output for lower level list elements and their URL's
                    if ( $depth > 0 ) {
                        $link = '<a href="' . esc_url( get_term_link($category) ) . '"' . '>' . $cat_name . '</a>';
                        $output .= "\t<li class='sub-category'>$link\n";
                    }

                }

                // Configure the end of each element
                function end_el(&$output, $page, $depth = 0, $args = array() ) {
                    if ( $depth === 0 ) {
                        $indent = str_repeat("\t", $depth);
                        $output .= "$indent</ul>\n</div>\n";
                    }
                    if ( $depth > 0 ) {
                        $output .= "</li>";
                    }

                }
            }

            wp_list_categories( array(
                'orderby' => 'name',
                'child_of' => 22,
                'title_li' => '',
                'walker' => new Walker_Simple_Example
            ));

        ?>

    </ul>

Во-первых, он не работает для дочернего элемента sub, а во-вторых, он добавляет заголовок родительской категории вне оболочки ul.

Если есть лучший способ сделать это, я весь слух!

Большое спасибо:)

...