Добавить атрибут данных в wp_nav_menu

У меня есть следующий код:

$nav_menu_args = array('fallback_cb' => '','menu' => 'menu', 'menu_class' => 'menu_class');

$x = wp_nav_menu( apply_filters( 'widget_nav_menu_args', $nav_menu_args, 'menu', $args ) );

$pattern = '#<ul([^>]*)>#i';

$replacement = '<ul$1 data-attr="abc">';  // this is a wrong

echo preg_replace( $pattern, $replacement, $x );

Я пытаюсь добавить data-attr в ul изменяя шаблон, и не внося изменений через Walker_Nav_Menu,

То, что я хочу сделать, это иметь такой список:

<ul class="menu_class" data-attr="abc">
<li><li>
<li>
<ul>
<li></li>
</ul>
<li>
</ul>

Но я также получаю data-attr на моей внутренней улице, как это.

<ul class="menu_class" data-attr="abc">
<li><li>
<li>
<ul data-attr="abc">
<li></li>
</ul>
<li>
</ul>

Что мне не хватает?

3

Решение

Вы можете добавить количество объектов, которые вы хотите заменить, так что это займет всего первое ul,

echo preg_replace( $pattern, $replacement, $x, 1 ); // 1 at the end to replace only the first occurence

Или просто измените ключ items_wrap в wp_nav_menu.

$nav_menu_args = array('fallback_cb' => '','menu' => 'menu', 'items_wrap' => '<ul class="menu_class" data-attr="abc">%3$s</ul>');
6

Другие решения

Других решений пока нет …