【问题标题】:Add data attribute to wp_nav_menu将数据属性添加到 wp_nav_menu
【发布时间】:2015-08-19 09:39:29
【问题描述】:

我有以下代码:

$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>

但是我的内部 ul 上也有一个 data-attr,就像这样。

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

我错过了什么?

【问题讨论】:

  • 是不是内部ul也加了data-attr的问题?
  • 是的。我想在 ul 中添加 data-attr。
  • 感谢您的帮助。我设法通过 $nav_menu_args 解决了这个问题。
  • 你的意思是像我刚刚在我的答案中编辑的?否则,用解决方案回答您自己的问题并将其标记为正确,以便其他人可以找到相同的解决方案。

标签: php wordpress menu nav custom-data-attribute


【解决方案1】:

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

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

或者只是改变 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>');

【讨论】:

  • '完全忘记了items_wrap - 太棒了!
猜你喜欢
  • 1970-01-01
  • 2011-07-25
  • 2014-07-11
  • 2022-11-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多