【发布时间】:2015-07-08 21:59:14
【问题描述】:
我使用 Wordpress 作为 CMS 系统,我想将每个 p 标记包装在一些 HTML 中,以便在我的网站中进行样式设置和定位。
我发现一段代码对我来说非常棒,但它现在做得太过分了。
这里是:
function tekst_wrapper($content) {
// match any p tags
$pattern = '~<p.*</p>~';
preg_match_all($pattern, $content, $matches);
foreach ($matches[0] as $match) {
// wrap matched p tag with div
$wrappedframe = '<div>' . $match . '</div>';
//replace original p tag with new in content
$content = preg_replace($pattern, $wrappedframe, $content);
}
return $content;
}
add_filter('the_content', 'tekst_wrapper');
这会在每个 p 标签周围添加 div 标签。但是对于帖子中的每个 p 标签,它开始在每个 p 标签上添加更多 div 标签。假设我有四个 p 标签,生成的 HTML 将是:
<div>
<div>
<div>
<div>
<p>random text</p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p>random text</p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p>random text</p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p>random text</p>
</div>
</div>
</div>
</div>
显然这不是我需要的,因为我只想将每个 p 标签包装在一个 div 标签中(或者我的替换 HTML 将是什么)。现在我的 PHP 技能不是那么好,但我认为 foreach 会导致它为在 $matches 数组中找到的每个匹配项添加 div 标记?有没有办法解决这个问题?
【问题讨论】:
-
不,它做得并不好。它是通过正则表达式完成的,这意味着你很幸运它正在工作。您应该使用 dom 解析器。阅读:stackoverflow.com/questions/3524431/…