Есть какие-нибудь документы для аргумента wp_nav_menu "items_wrap"?


42

Я использую wp_nav_menu и пытаюсь создать пользовательский вывод для выпадающих подуровней. Я сталкивался с аргументом "items_wrap", но на самом деле не так много информации о том, что это такое, как оно работает и что можно с ним сделать.

Что такое " % 1 $ s " и " % 2 $ s "? (Кто-нибудь может объяснить это с точки зрения непрофессионала?)

Ответы:


57

Параметр 'items_wrap'по wp_nav_menu()умолчанию:

'<ul id="%1$s" class="%2$s">%3$s</ul>' 

Это шаблон, который анализируется с sprintf():

$nav_menu .= sprintf( 
    $args->items_wrap
,   esc_attr( $wrap_id )    // %1$s
,   esc_attr( $wrap_class ) // %2$s
,   $items                  // %3$s
);

Пронумерованные заполнители - %1$s, %2$s, %3$s- см аргументы после первого аргумента в sprintf(). Знак процента обозначает заполнитель, число позиция и тип sозначают, что его следует рассматривать как строку.
Не меняйте тип, если вы действительно не знаете, что делаете. :)

  • $wrap_idэто параметр, 'menu_id'если он у вас установлен, иначе он есть 'menu-' . $menu->slug.
  • $wrap_classэто параметр, 'menu_class'если он у вас установлен, иначе он пуст.
  • $items это строка внутреннего содержимого меню.

Допустим, вам не нужен class. Просто опустите вторую строку:

wp_nav_menu( array( 'items_wrap' => '<ul id="%1$s">%3$s</ul>' ) );

Если вам не нужны и classи id, и вам нужен другой контейнер (потому что вы использовали пользовательский обходчик ):

wp_nav_menu( array( 'items_wrap' => '<div>%3$s</div>' ) );

Главное: вы должны использовать числа для замен, указанных в wp_nav_menu(). %3$sэто всегда список предметов.


Спасибо за попытку объяснить. Я вроде вижу это, но у меня это не получается. Я хочу добавить, скажем, класс для моих предметов. Вы, кажется, используете ul для каждого предмета? Я не вижу в своем коде sprintf, так что это не ясно.
приземлился

1
@landed Это для всего меню , а не для каждого пункта. Пожалуйста, используйте наш поиск, у нас есть существующие решения для вашей проблемы.
fuxia

Я выполнил поиск в Интернете, и у других возникла та же проблема, что и для расширения класса Walker, и добавления моего HTML-кода. Это работало нормально, но мне пришлось скопировать довольно много кода из старого класса, переименовать его и изменить, а затем установить меню, чтобы использовать мой пользовательский класс ходока. Спасибо
приземлился

Я могу немного опоздать на вечеринку, но если бы вы хотели представить текст, items_wrapкак бы вы это сделали?
Генрирайт

@henrywright Сначала переведите значения, передайте их в строку.
fuxia

0

из того, что я собираю, он берет вывод и дает li идентификатор и класс с именем меню. Поэтому, когда вы хотите стилизовать определенное меню, вы берете его идентификатор и / или класс, если хотите его стилизовать. 1 и 2 - это просто другой выход.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.