preg_replace wp 菜单项
preg_replace wp menu item
需要一些关于 preg_replace
inside 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
class 时,我想将其更改为下面的 html 标记.
<div class="navigation-heading">
<span>
<span><a href="#">Main</a></span>
</span>
</div>
如果有人能帮我解决下面的代码,我将不胜感激。
function add_nav_class($output) {
$output= preg_replace('...', '...', $output, 1);
return $output;
}
add_filter('wp_nav_menu', 'add_nav_class');
编辑:
这是我的整个菜单(菜单 ID 在 Wordpress 中可能会有所不同)。
<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>
只有带navigation-heading
class的应该改成<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
(感谢您分享的网站 url)。
function new_submenu_class($menu) {
$menu = preg_replace('/id=\"(.*?)\"/', '', $menu );
return $menu;
}
add_filter('wp_nav_menu','new_submenu_class');
但从现在开始我被困住了。
解决方案:(感谢 Quixrick)
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></span></span></div>';
$menu = preg_replace($str, $replace, $menu );
return $menu;
}
add_filter('wp_nav_menu','change_link_to_heading');
我建议使用 Walker_Nav_Menu class 更改菜单元素周围的 html 标签。
这看起来相对简单,可能根本不需要复杂。基本上,您可以捕获 <li>
标签内的所有内容,然后将其插入替换字符串。
最简单的形式就是这样:
<li.*?>(.*?)</li>
但如果是我,我可能会通过在捕获组前后添加 \s*
来删除匹配项周围的多余空格。
<li.*?>\s*(.*?)\s*</li>
好吧,无论如何,一旦你捕获了匹配项,你就可以像这样填写 </code> 周围的文本:</p>
<pre><code><div class="navigation-heading">\n<span>\n <span></span>\n</span>\n</div>
这应该就是您需要的全部内容了。
需要一些关于 preg_replace
inside 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
class 时,我想将其更改为下面的 html 标记.
<div class="navigation-heading">
<span>
<span><a href="#">Main</a></span>
</span>
</div>
如果有人能帮我解决下面的代码,我将不胜感激。
function add_nav_class($output) {
$output= preg_replace('...', '...', $output, 1);
return $output;
}
add_filter('wp_nav_menu', 'add_nav_class');
编辑:
这是我的整个菜单(菜单 ID 在 Wordpress 中可能会有所不同)。
<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>
只有带navigation-heading
class的应该改成<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
(感谢您分享的网站 url)。
function new_submenu_class($menu) {
$menu = preg_replace('/id=\"(.*?)\"/', '', $menu );
return $menu;
}
add_filter('wp_nav_menu','new_submenu_class');
但从现在开始我被困住了。
解决方案:(感谢 Quixrick)
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></span></span></div>';
$menu = preg_replace($str, $replace, $menu );
return $menu;
}
add_filter('wp_nav_menu','change_link_to_heading');
我建议使用 Walker_Nav_Menu class 更改菜单元素周围的 html 标签。
这看起来相对简单,可能根本不需要复杂。基本上,您可以捕获 <li>
标签内的所有内容,然后将其插入替换字符串。
最简单的形式就是这样:
<li.*?>(.*?)</li>
但如果是我,我可能会通过在捕获组前后添加 \s*
来删除匹配项周围的多余空格。
<li.*?>\s*(.*?)\s*</li>
好吧,无论如何,一旦你捕获了匹配项,你就可以像这样填写 </code> 周围的文本:</p>
<pre><code><div class="navigation-heading">\n<span>\n <span></span>\n</span>\n</div>
这应该就是您需要的全部内容了。