wp_nav_menu добавить что-то перед закрытием контейнера и после последнего элемента списка

Я искал способ жесткого кода <div> перед закрывающим тегом контейнера определенного меню:

 $footer_nav = array( 'menu' => 'footer-menu', 'menu_class' => 'foobar', 'container' => 'ul', 'theme_location' => 'footer', 'menu_id' => 'footer_menu', 'echo' => true, 'depth' => 1, ); wp_nav_menu( $footer_nav ); 

Однако, когда я пытаюсь добавить:

 'after' => '<div class="foo">bar</div>', 

он добавляет его после каждого элемента списка. Когда я исследовал решение, с которым я столкнулся, я хочу удалить последний после wp_nav_menu и WordPress Functions – Как использовать функцию Replace String. добавить код, но когда я попробую:

 function foobar_the_menu($items,$args) { if ($args->theme_location == 'footer') { $footer_pattern = '</li></ul>'; $footer_replacement = '</li><div class="foo">bar</div></ul>'; return substr_replace( $footer_pattern, $footer_replacement, $items, 1 ); } } add_filter( 'wp_nav_menu', 'foobar_the_menu', 10, 2 ); 

Он удаляет все меню. После ссылки на несколько других вопросов я видел wp_nav_menu_items и preg_replace но я не уверен, что правильный подход к таргетингу определенного меню, чтобы жестко закодировать div, поскольку вы не можете изменить это в массиве меню?

Solutions Collecting From Web of "wp_nav_menu добавить что-то перед закрытием контейнера и после последнего элемента списка"

Я думаю, вы можете использовать:

 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s <div class="foo">bar</div> </ul>', 

как аргумент wp_nav_menu() .

Мы используем эту часть функции wp_nav_menu() :

 $nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items ); 

где аргумент items_wrap содержит следующие спецификаторы sprintf :

  • %1$s для соответствия идентификатору обертки
  • %2$s для соответствия классу wrap
  • %3$s для соответствия сформированному HTML для элементов .