@avprinciple

Как изменить каждый пункт меню, и вставить в ссылку новые атрибуты из ACF field пункта меню?

Приветствую!

Через ACF добавляю в каждый пункт кастомного меню поле с изображением.
<li class="menu__item"> // В каждом пункте хранится ACF поле - объект картинки.
  <a class="menu__link">Any link</a>
</li>


Задача такая, нужно брать из пунка меню <li>ACF field - в данном случае изображение в виде объекта, беру из объекта ссылку и альт, и эти данные нужно вставить в ссылку <a>data-атрибутами.

$menu_name = 'tab-menu';
    $locations = get_nav_menu_locations();

    if( $locations && isset( $locations[ $menu_name ] ) ) {
      $menu_items = wp_get_nav_menu_items( $locations[ $menu_name ] );

      foreach( $menu_items as &$menu_item ) {
        $field = get_field('tab-menu-image', $menu_item);

        var_dump($field['url']);
        var_dump($field['alt']);
      }
    }


Я эти атрибуты получаю с каждого пункта <li> кастомного меню.
Как мне эти данные записать в соответствующую ссылку в data-атрибуты?

Как изменить каждый пункт меню?
add_filter( 'wp_nav_menu_objects', 'filter_wp_nav_menu_objects', 10, 2 );
  function filter_wp_nav_menu_objects( $items, $args ) {
    if ( 
        $args->theme_location == 'tab-menu' ||
        $args->theme_location == 'materials-menu' ||
        $args->theme_location == 'septics-menu'
       ) {
      foreach ( $items as $item ) {
        $field = get_field('tab-menu-image', $item);
        $item = // Как менять каждый пункт меню - её html структуру?
    }
    return $items;
  }


Должно получится:

<li class="menu__item">
  <a class="menu__link" data-image="Какая-то ссылка" data-alt="Какой-то альт">Any link</a>
</li>
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 2
ssenj
@ssenj
HTML, CSS, PHP, WordPress, Bitrix
На одном проекте я психанул, распарсил html менюхи через DomDocument и вытащил только ссылки. Потом верстал менюху по своему желанию.
Ответ написан
@avprinciple Автор вопроса
Гуглил, не нашел как мне менять html каждого пункта меню. Везде только .= то есть только дописать какой-то html к существующему меню или правки по атрибутам пункта меню (url, title, classes и т.д.)

Написал себе такое вместо дата-атрибутом в ссылки :D

add_filter( 'wp_nav_menu_objects', 'filter_wp_nav_menu_objects', 10, 2 );
  function filter_wp_nav_menu_objects( $items, $args ) {
    if ( 
        $args->theme_location == 'tab-menu'
       ) {
      foreach ( $items as $item ) {
        $field = get_field('tab-menu-image', $item);
        $item->title .= 
          '
            <i class="menu-tab__list-link-img-url">'.$field['url'].'</i>
            <i class="menu-tab__list-link-img-alt">'.$field['alt'].'</i>
          ';
      }
    }
    return $items;
  }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы