将数据属性添加到wp_nav_menu

sfi*_*irc 4 php wordpress menu nav custom-data-attribute

我有以下代码:

$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 );
Run Code Online (Sandbox Code Playgroud)

我想一个添加data-attrul通过改变模式,而无需通过更改Walker_Nav_Menu.

我想要做的是有一个这样的列表:

<ul class="menu_class" data-attr="abc">
  <li><li>
  <li>
    <ul>
      <li></li>
    </ul>
  <li>
</ul>
Run Code Online (Sandbox Code Playgroud)

但是我也data-attr喜欢这样的内心.

<ul class="menu_class" data-attr="abc">
  <li><li>
  <li>
    <ul data-attr="abc">
      <li></li>
    </ul>
  <li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Tee*_*Jee 8

您可以添加要替换的对象数,因此只需要第一个ul.

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

或者只需更改wp_nav_menu的items_wrap键.

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