Content filter won't work

时间:2013-02-15 作者:fefe

我试图过滤我的内容和流上的匹配项,我想更改我的html结构,但我的规则并不适用。我有下面的过滤器,它搜索帖子的第一个图像和附加css容器的规则匹配。这个preg_match_all 正在工作,但str_replace 没有

function imageFooter($content){

      global $post, $posts;

      preg_match_all(\'/<a.href="(.*?)"><img.*?src="(.*?)".*?><\\/a>/\', $post->post_content, $matches);
      $to_search = $matches[0][0];
      $replacement = \'<div class="image_footer">\'.$matches[0][0].\'<span class="logo"></span></div>\';
      str_replace($to_search , $replacement, $post->post_content);
      return $content;

    }

    add_filter(\'the_content\',   \'imageFooter\');

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

改变

str_replace($to_search , $replacement, $post->post_content);
至。。

$content =  str_replace($to_search , $replacement, $post->post_content);

SO网友:s_ha_dum

您尚未设置$content 它只是返回传递给函数的相同内容。阅读文档str_replace. 您应该具备:

$content = str_replace($to_search , $replacement, $post->post_content);
但你为什么要做手术$post->post_content? 帖子内容将传递到过滤器中。您甚至有一个名为$content 您没有使用的。你正在做的事可能会引起麻烦。想想这个。

您的站点上有4个筛选器the_content 包括你的。

使用$content使用$content 如过滤器1所修改,因为它们“连锁”使用$content 由前两个过滤器修改$post->content 在“链条”之外。您刚刚删除了前面的所有过滤器此外,您没有使用$posts 完全

您的代码应为:

function imageFooter($content){
      preg_match_all(\'/<a.href="(.*?)"><img.*?src="(.*?)".*?><\\/a>/\', $content, $matches);
      $to_search = $matches[0][0];
      $replacement = \'<div class="image_footer">\'.$matches[0][0].\'<span class="logo"></span></div>\';
      $content = str_replace($to_search , $replacement, $content);
      return $content;
}

add_filter(\'the_content\',   \'imageFooter\');
应该提醒您,使用regex解析HTML是非常危险的。很容易出错。

结束