我之前构建了一些 html 页面,其中几个段落位于 div 内,现在我想将其移动到 WordPress 中以了解主题和 CMS 的结构,但我有一些问题需要理解。例如,在循环中,我不能只在起点添加开始 div,在末尾添加结束 div(显然),因为在中间有不同的元素包裹在其他 div 中。例如,我想采用最后一段,使用自定义类在其周围创建一个包装 div,我的解决方案是这样的。我确信这是一个完全混乱的解决方案。我究竟做错了什么? // First function function addDivLastP1( $content ) { $pattern = '/[\s\S]*\K(<p>)/i'; // Here i adding the opening tag div. I close it later in another function $replacement = '<div class="my_class">$1'; $content = preg_replace( $pattern, $replacement, $content ); return $content; } add_filter( 'the_content', 'addDivLastP1' ); // Second function function addDivLastP2( $content ) { $pattern = '/[\s\S]*\K(<\/p>)/i'; // Closing div previously open $replacement = '</div>'; $content = preg_replace( $pattern, $replacement, $content ); return $content; } add_filter( 'the_content', 'addDivLastP2' );
1 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
通过正则表达式解析 HTML(或任何 XML)并不是一个好主意。
在您的情况下,最好使用DOMDocument:
function addDivLastP( $content ) {
$doc = new DOMDocument();
if(!$doc->loadHTML($content)) {
// cannot parse HTML content
return $content;
}
for($i = $doc->childNodes->count()-1; $i >= 0; $i--) {
$child = $doc->childNodes[$i];
if ($child->nodeName === 'p') { // got last paragraph inside root node
$div = $doc->createElement('div');
// replace paragraph by new empty div
$doc->replaceChild($div, $child);
// insert paragraph inside div
$div->appendChild($child);
return $doc->saveHTML();
}
}
return $content;
}
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消