删除img、iframe和脚本周围的<p>标记

时间:2016-09-16 作者:10Y01

我一直在处理嵌入内容,很多人都知道,wordpress将\\u content()行包装在p标记中。

因此,我们发现:

$content = preg_replace(\'/<p>\\s*(<img .* \\/>)\\s*(<\\/a>)?\\s*<\\/p>/iU\', \'\\1\\2\\3\', $content);
return preg_replace(\'/<p>\\s*(<iframe .*>*.<\\/iframe>)\\s*<\\/p>/iU\', \'\\1\', $content);
当我将“iframe”改为“script”时,它会起作用,但只对其中一个起作用,因为推特embbed会创建一个隐藏的script元素,而这又会创建一个鬼段落。

2 个回复
最合适的回答,由SO网友:cowgill 整理而成

这应该可以做到这一点,也可以删除<p> 链接图像中的标记。

为什么它只从一个<script> 实例很难说。必须查看您的网站代码才能进行进一步调查。

// Remove p tags from images, scripts, and iframes.
function remove_some_ptags( $content ) {
  $content = preg_replace(\'/<p>\\s*(<a .*>)?\\s*(<img .* \\/>)\\s*(<\\/a>)?\\s*<\\/p>/iU\', \'\\1\\2\\3\', $content);
  $content = preg_replace(\'/<p>\\s*(<script.*>*.<\\/script>)\\s*<\\/p>/iU\', \'\\1\', $content);
  $content = preg_replace(\'/<p>\\s*(<iframe.*>*.<\\/iframe>)\\s*<\\/p>/iU\', \'\\1\', $content);
  return $content;
}
add_filter( \'the_content\', \'remove_some_ptags\' );

SO网友:Zeth

下面是一个JavaScript函数:

moveIframesOutOfPtags() {
  let iframes = document.querySelectorAll( \'iframe\' );

  let before = "<div class="iframe-container">";
  let after = "</div>";

  Object.entries( iframes ).forEach( entry => {
    let value = entry[1];

    if( value.parentNode.nodeName === \'P\' || value.parentNode.nodeName === \'p\' ){
      value.parentNode.outerHTML = before + value.parentNode.innerHTML + after;
    }
  });
}
我还写了一些细节over here.

相关推荐

Embed Form In Header

我正在使用WordPress主题Twenty Ninteen,并试图借助Travelpayouts提供的旅游联盟API创建一个旅游博客。<script charset=\"utf-8\" src=\"//www.travelpayouts.com/widgets/920a6b8c6fc20070013d2e04f690210d.js?v=1649\" async></script> 这是要在页面/帖子上显示的表单代码,如果我在任何帖子上使用的页面代码工作正常,但我需要在标