Добавьте заголовок <li>перед первым <li>раскрывающегося списка с помощью Wordpress Nav-walker class - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь добавить новый <li> перед первым <li> (или <div>) раскрывающегося списка bootstrap, который будет названием раскрывающегося списка. Я знаю, что должно быть условие на выходе $, но что я должен нацелить на вывод только перед первым <li> раскрывающегося списка?

Код до сих пор (внутри функции start_el()) -

if($depth == 1) {

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';

        $item_output = $args->before;


        // The output to be filtered with condition
        $item_output .= '<div class="dropdown-item dropdown-title">DROPDOWN TITLE</div>';


        $item_output .= '<a class="dropdown-item" '. $attributes .'>';
        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

}

Вывод выводится эхом перед каждым <li>. Снимок экрана -

enter image description here

1 Ответ

0 голосов
/ 01 мая 2020

Если это в методе start_lvl, то я не думаю, что есть какой-либо аргумент, который поможет вам. Но вы можете просто добавить stati c var и установить его на false, как только первый элемент будет обработан, если хотите ..

Может быть не самое чистое решение, но если вы не найдете другое простое решение, тогда оно может помочь вам.

static $isDropdownTitleRendered = false; // Static variable so the value stays remembered during the request
if ($depth == 1) {
        // First part of your code
        // ...

        // The output to be filtered with condition
        if (!$isDropdownTitleRendered) {
                $item_output .= '<div class="dropdown-item dropdown-title">DROPDOWN TITLE</div>';
                $isDropdownTitleRendered = true;
        }

        // ...
        // Rest of your code
}
...