Я использую ACF и фильтр wp_nav_menu_objects для добавления определенных классов к элементам. Например, кнопки получают класс .btn, элементы, которым нужен значок, прежде чем они получат класс значка и т. д. Я нашел простой способ добавления текста и элементов в < a>, но я не могу понять, как добавить ПЕРЕД фактическим тегом внутри тега . Я знаю, что есть простая функция
wp_nav_menu( array ( 'before' => 'I am adding before the ' ) );
Однако у меня это не работает, поскольку мне нужен только перед конкретными элементами, в зависимости от поля ACF. Я также знаю, что потенциально могу использовать функцию Wordpress Walker, но мне бы хотелось этого избежать, поскольку я пытаюсь сделать это довольно мелко.
Вот мой фильтр для wp_nav_menu_objects
function add_menu_item_type( $items, $args ) {
$parents = wp_list_pluck( $items, 'menu_item_parent' );
$menu = wp_get_nav_menu_object( $args->menu );
foreach ( $items as &$item ) {
$type = get_field( 'menu_item_type', $item );
$icon = get_field( 'menu_item_icon', $item );
$show_on_mobile = get_field( 'show_on_mobile', $item );
$mobile_nav = get_field( 'include_in_mobile_nav', $menu );
if ( 'logo' === $type ) {
array_push( $item->classes, 'logo' );
}
if ( 'button' === $type ) {
array_push( $item->classes, 'btn d-none d-lg-flex' );
} elseif ( ! $show_on_mobile && ( 'primary_left_nav' === $args->theme_location || 'primary_right_nav' === $args->theme_location ) ) {
array_push( $item->classes, 'd-none d-lg-block' );
}
if ( $mobile_nav || 'primary_mobile_nav' === $args->theme_location ) {
array_push( $item->classes, 'col-24' );
}
// If Dropdown add class.
if ( 'dropdown' === $type ) {
$item->title .= ' ';
}
// If Dropdown add class.
if ( 'icon' === $type && ! empty( $icon ) ) {
// HERE IS WHERE I WOULD LIKE TO DO SOMETHING LIKE $item->before
$item->title = ' ' . $item->title;
}
// If Dropdown and has children.
if ( in_array( $item->ID, $parents, true ) && 'has-children' === $item->classes[0] && 'dropdown' === $type ) {
array_push( $item->classes, 'menu-item-dropdown' );
}
}
return $items;
}
add_filter( 'wp_nav_menu_objects', 'add_menu_item_type', 10, 2 );
Подробнее здесь: https://stackoverflow.com/questions/588 ... ific-items
Навигация WordPress перед конкретными элементами ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1731390534
Anonymous
Я использую ACF и фильтр wp_nav_menu_objects для добавления определенных классов к элементам. Например, кнопки получают класс .btn, элементы, которым нужен значок, прежде чем они получат класс значка и т. д. Я нашел простой способ добавления текста и элементов в < a>, но я не могу понять, как добавить ПЕРЕД фактическим тегом внутри тега . Я знаю, что есть простая функция
wp_nav_menu( array ( 'before' => 'I am adding before the ' ) );
Однако у меня это не работает, поскольку мне нужен только перед конкретными элементами, в зависимости от поля ACF. Я также знаю, что потенциально могу использовать функцию Wordpress Walker, но мне бы хотелось этого избежать, поскольку я пытаюсь сделать это довольно мелко.
Вот мой фильтр для wp_nav_menu_objects
function add_menu_item_type( $items, $args ) {
$parents = wp_list_pluck( $items, 'menu_item_parent' );
$menu = wp_get_nav_menu_object( $args->menu );
foreach ( $items as &$item ) {
$type = get_field( 'menu_item_type', $item );
$icon = get_field( 'menu_item_icon', $item );
$show_on_mobile = get_field( 'show_on_mobile', $item );
$mobile_nav = get_field( 'include_in_mobile_nav', $menu );
if ( 'logo' === $type ) {
array_push( $item->classes, 'logo' );
}
if ( 'button' === $type ) {
array_push( $item->classes, 'btn d-none d-lg-flex' );
} elseif ( ! $show_on_mobile && ( 'primary_left_nav' === $args->theme_location || 'primary_right_nav' === $args->theme_location ) ) {
array_push( $item->classes, 'd-none d-lg-block' );
}
if ( $mobile_nav || 'primary_mobile_nav' === $args->theme_location ) {
array_push( $item->classes, 'col-24' );
}
// If Dropdown add class.
if ( 'dropdown' === $type ) {
$item->title .= ' ';
}
// If Dropdown add class.
if ( 'icon' === $type && ! empty( $icon ) ) {
// HERE IS WHERE I WOULD LIKE TO DO SOMETHING LIKE $item->before
$item->title = ' ' . $item->title;
}
// If Dropdown and has children.
if ( in_array( $item->ID, $parents, true ) && 'has-children' === $item->classes[0] && 'dropdown' === $type ) {
array_push( $item->classes, 'menu-item-dropdown' );
}
}
return $items;
}
add_filter( 'wp_nav_menu_objects', 'add_menu_item_type', 10, 2 );
Подробнее здесь: [url]https://stackoverflow.com/questions/58845553/wordpress-navigation-before-specific-items[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия