我正在尝试将html标记添加到具有特定类的无序列表中。
这将是以以下内容开头的HTML:
<
ul>
<
li>
Item 1<
/li>
<
li>
Item 2<
/li>
<
li>
Item 3<
/li>
<
/ul>
<
ul class="foo">
<
li>
Item 1<
/li>
<
li>
Item 2<
/li>
<
li>
Item 3<
/li>
<
/ul>
最后, 我想得出:
<
ul>
<
li>
Item 1<
/li>
<
li>
Item 2<
/li>
<
li>
Item 3<
/li>
<
/ul>
<
ul class="foo">
<
li>
<
svg class="icon">
<
use xlink:href="http://www.srcmini.com/#foo">
<
/use>
<
/svg>
Item 1<
/li>
<
li>
<
svg class="icon">
<
use xlink:href="http://www.srcmini.com/#foo">
<
/use>
<
/svg>
Item 2<
/li>
<
li>
<
svg class="icon">
<
use xlink:href="http://www.srcmini.com/#foo">
<
/use>
<
/svg>
Item 3<
/li>
<
/ul>
我还没有找到可用于运行preg_replace()使其能够正常工作的正则表达式。
内容是使用Wordpress创建的。我想使用过滤器来扫描the_content并添加额外的标记。以这种方式:
function foo_ul($text) {
//some function
return $text;
}
add_filter('the_content', 'foo_ul');
我不想依赖Javascript / jQuery, 因此希望在服务器端生成。
有任何想法吗?
#1正如你所看到的那样, 使用正则表达式匹配HTML是不好的。但是, 如果你的字符串是你在OP中显示的字符串, 则可以使用此正则表达式模式选择< li> < / li> 之间的每个字符串, 然后向其中添加目标字符串。
$newHtml = preg_replace("/(?<
=<
li>
)(.*)(?=<
\/li>
)/", '<
svg class="icon">
<
use xlink:href="http://www.srcmini.com/#foo">
<
/use>
<
/svg>
$1', $html);
在演示中检查结果
更新:如果你有多个ul, 并且只想匹配.foo, 请使用此代码
$newHtml = preg_replace_callback("/(?<
=<
ul\sclass=\"foo\">
).*?(?=<
\/ul>
)/s", function($ma){
return preg_replace("/(?<
=<
li>
)(.*)(?=<
\/li>
)/", '<
svg class="icon">
<
use xlink:href="http://www.srcmini.com/#foo">
<
/use>
<
/svg>
$1', $ma[0]);
}, $html);
【WP替换嵌套在某些类中的列表项】在演示中检查结果
推荐阅读
- WP自定义一个页面替换Woocommerce主页
- WP在body标签内渲染HTML
- 从get_the_content输出显示中删除URL
- 删除WordPress主题小部件支持
- 从错误页面的标签标题中删除”WordPress”
- 删除菜单中当前页面的下划线(Twenty Twenty主题)
- 从WordPress的脚本标签中删除type属性
- WP删除社交菜单页脚
- Kubernetes之kuberconfig--普通用户授权kubernetes集群