如何用PHP的preg_replace在父锚点与下拉ul间插入button元素
需求描述
我有一段HTML代码,需要用preg_replace或同类函数添加一个可用于JavaScript事件的<button>元素。要求仅针对带有menu-item-has-children类的<li>元素,在其内部的<a>标签与class为sub-menu的<ul>标签之间插入该按钮。
我已经有一个处理无href属性锚点的WordPress过滤器函数,但无法修改它来实现上述需求。
示例HTML代码
<li id="" class="menu-item-has-children"> <a href="https://example.com">Parent Menu Item</a> <!-- Add button HTML element here --> <ul class="sub-menu"> <!-- Child menu items --> </ul> </li>
正则表达式思路
$pattern = '/<li id="(.*?)" class="menu-item-has-children"><a href="(.*?)">(.*?)<\/a><ul class="(.*?)">(.*?)<\/ul><\/li>/s';
已有的WordPress过滤器函数
add_filter( 'wp_nav_menu_items', 'themename_filter_empty_anchor_items', 10, 2 ); function themename_filter_empty_anchor_items( $items, $args ) { if( $args->theme_location == 'want-to-navigation') { $pattern = '/<a>(.*?)<\/a>/s'; $replacement = '<button aria-expanded="false" data-submenu-toggle="">$1<svg role="img" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><title>Expand submenu navigation icon</title><path d="m432 256c0 17.69-14.33 32.01-32 32.01h-144v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144h-144c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99h144v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144c17.7-.01 32 14.29 32 31.99z"/></svg></button>'; $items = preg_replace( $pattern, $replacement, $items ); } return $items; }
内容的提问来源于stack exchange,提问作者Mike Hermary
相关产品推荐
相关产品推荐

