preg_replace wp菜单项

时间:2016-06-04 17:44:10

标签: php wordpress preg-replace

在wordpress中需要<li id="menu-item-98" class="navigation-heading menu-item menu-item-type-custom menu-item-object-custom menu-item-98"> <a href="#">Main</a> </li> 的帮助。

我的源代码是这样的

preg_replace

使用li时,只要navigation-heading标记包含<div class="navigation-heading"> <span> <span><a href="#">Main</a></span> </span> </div> 类,我就会将其更改为以下html标记。

function add_nav_class($output) {
    $output= preg_replace('...', '...', $output, 1);
    return $output;
}
add_filter('wp_nav_menu', 'add_nav_class');

如果有人可以帮我解决下面的代码,我会非常感激。

    <ul>
<li class="vendor-dashboard menu-item menu-item-type-custom menu-item-object-custom menu-item-22"><a href="#link">Menu Title</a></li>
<li class="navigation-heading menu-item menu-item-type-custom menu-item-object-custom menu-item-99"><a href="#">WP Heading 1</a></li>
<li class="vendor-dashboard menu-item menu-item-type-custom menu-item-object-custom menu-item-26"><a href="#link">Menu Title</a></li>
<li class="vendor-dashboard menu-item menu-item-type-custom menu-item-object-custom menu-item-16"><a href="#link">Menu Title</a></li>
<li class="navigation-heading menu-item menu-item-type-custom menu-item-object-custom menu-item-44"><a href="#">WP Heading 2</a></li>
</ul>

编辑:

这是我的整个菜单(菜单ID在Wordpress中可能有所不同)。

navigation-heading

只有<div class="navigation-heading">...</div>类的人才应更改为<div class="navigation-heading">...</div>

当我使用您的代码时,菜单消失了,只有<ul> <div class="navigation-heading"><span><span><a href="#">Heading</a></span></span></div> <li id="menu-item-56" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-56"> <div class="navigation-heading"><span><span><a href="#">Heading</a></span></span></div> <li id="menu-item-79" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-79"> <li id="menu-item-80" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-80"> </ul> 仍在那里。

我的最终目标是创造这个:

li ID's

从原始菜单中,我可以轻松删除function new_submenu_class($menu) { $menu = preg_replace('/id=\"(.*?)\"/', '', $menu ); return $menu; } add_filter('wp_nav_menu','new_submenu_class'); (感谢您分享的网站网址)。

 function change_link_to_heading($menu) {

    $str = '/<li.*?navigation-heading.*?>\\s*<a href=\"#\">\\s*(.*?)\\s*<\\/a><\\/li>/m';
    $replace = '<div class="navigation-heading"><span><span>$1</span></span></div>';

    $menu = preg_replace($str, $replace, $menu );   

    return $menu;  
}
add_filter('wp_nav_menu','change_link_to_heading'); 

但从现在开始我就被困住了。



解决方案:(感谢 Quixrick

compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'

2 个答案:

答案 0 :(得分:0)

我建议使用Walker_Nav_Menu类来更改菜单元素周围的html标签。

Check this link with example

Source of Walker_Nav_Menu class

答案 1 :(得分:0)

这似乎相对简单,可能根本不需要复杂。基本上,您可以捕获var isPrime = n => Array(Math.ceil(Math.sqrt(n)+1)).fill().map((e,i)=>i).slice(2).every(m => n%m); console.log(Array(100).fill().map((e,i)=>i+1).slice(1).filter(isPrime)); 标记内的所有内容,然后将其插入到替换字符串中。

最简单的形式就是:

<li>

但如果是我,我可能只是通过在捕获组之前和之后添加<li.*?>(.*?)</li> 来删除匹配周围的额外空格。

\s*

嗯,无论如何,一旦你捕获了你的比赛,你可以像这样填写<li.*?>\s*(.*?)\s*</li> 周围的文字:

$1

这应该是你在驱动器中踢这个东西所需的全部。

Here is a demo of the REGEX

Here is a demo of it in PHP