0

我有以下代码,据说它会删除所有p包裹在图像周围的标签。我实际上是在将其复制并粘贴到我的functions.php. 但是,它不起作用:

function filter_ptags_on_images($content){
   return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}

add_filter('the_content', 'filter_ptags_on_images');

我需要用与我的主题更相关的东西来更改函数参数吗?我是 WordPress 的新手,所以为这个看似愚蠢的问题道歉。

4

4 回答 4

1

您可以通过在 functions.php 中添加此代码来禁用此功能

remove_filter( 'the_content', 'wpautop' );  // Disable auto 'p' in content

remove_filter( 'the_excerpt', 'wpautop' ); // Disable auto 'p' in excerpt

删除过滤器()

wpautop

于 2013-08-24T11:19:25.153 回答
0
var context = $("p > img");

for (var i = 0; i < context.length; i++) {
    $(context[i]).remove();
}

这将删除<p>图像周围的所有标签及其内容。

于 2013-08-22T18:58:52.957 回答
0

这不行吗?

function filter_ptags_on_images($content){
   return preg_replace('/\<p\b.*?\>(.+)\<\/p\>/i', '$1', $content);
}

编辑:

我的错,对不起,我没有仔细阅读

function filter_ptags_on_images($content){
   if (!preg_match_all('/\<p\b.*?\>(.+?)\<\/p\>/is',$content,$ps)) {
      return $content;
   }

   $new_content = $content;

   foreach ($ps[0] as &$p) {
      if (strpos($p,"<img ")) {
         $p_stripped_chunk = preg_replace('/\<p\b.*?\>(.*?\<img\b.+\>.*?)\<\/p\>/is', '$1', $p);
         $new_content = str_replace($p,$p_stripped_chunk,$new_content);
      }
   }

   return $new_content;
}

编辑:

这是我认为的另一个更好的版本:

function filter_ptags_on_images($content){
   if (!preg_match_all('/\<p\b.*?\>(.*?)\<\/p\>/is',$content,$ps_with_image)) {
      return $content;
   }

   foreach ($ps_with_image[0] as $match_x => $p) {
      if (!stripos($p,'<img')) {
         unset($ps_with_image[0][$match_x],$ps_with_image[1][$match_x]);
      }
   }

   return str_replace($ps_with_image[0], $ps_with_image[1], $content);
}

编辑:

这是更好的版本:

function filter_ptags_on_images($content){
   if (!preg_match_all('/\<p\b[^\>]*?\>(([^\<]|\<(?!\/p))*?\<img\b.+?\>.*?)\<\/p\>/is',$content,$ps_with_image)) {
      return $content;
   }
   return str_replace($ps_with_image[0], $ps_with_image[1], $content);
}
于 2013-08-22T16:47:28.347 回答
0

从图像和 iFrame 中过滤 P 标签

function filter_ptags_on_images($content)
{
$content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
return preg_replace('/<p>\s*(<iframe .*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
}
add_filter('the_content', 'filter_ptags_on_images');
于 2013-08-23T13:16:33.427 回答