我想删除插件添加的div到WordPress帖子的内容。所以帖子有这个结构:
<div class="post">
<div class="some-class">
<p>content</p>
</div>
</div>
我想删除<div class="some-class">
及其结束</div>
,但保留内容。所以它会是:
<div class="post">
<p>content</p>
</div>
使用此过滤器:
add_filter( 'the_content', 'remove_class' , 100 );
function remove_class( $content ) {
$content = preg_replace('#<div[^>]*class="some-class"[^>]*>.*?</div>#is', '', $content);
return $content;
}
内容也被删除,我只想删除div和结束div。知道怎么样?
答案 0 :(得分:2)
你可以尝试删除class属性,这样只剩下<div>
,使用如下代码:
add_filter( 'the_content', 'remove_class' , 100 );
function remove_class( $content ) {
$content = preg_replace('/class=".*?"/', '', $content);
return $content;
}
答案 1 :(得分:0)
@ user7592255你可以尝试使用这样的jQuery:
$('p').unwrap();
如果你可以在p元素上设置id或class,你可以更准确地定位它
答案 2 :(得分:0)
删除内容是因为用空字符串替换整个匹配的字符串。使用subpattern捕获<div>
元素的内容并将其用作替换:
$content = preg_replace(
'#<div[^>]*class="some-class"[^>]*>(.*?)</div>#is',
'$1',
$content
);
但是,请注意,如果<div class="some-class">
的内容包含<div>
元素,它将无法正常工作。
无法使用regex
解析HTML。正确的解决方案是使用HTML解析器(DOMDocument
f.e.)来解析HTML片段并创建其DOM,然后在DOM上操作更改并将其渲染回HTML。