删除WordPress内容中的开始和结束div

时间:2017-08-21 06:15:26

标签: php wordpress

我想删除插件添加的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。知道怎么样?

  • 这个问题与其他问题不重复,因为我想删除一个特定的div而不仅仅是所有div

3 个答案:

答案 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。