为了账号安全,请及时绑定邮箱和手机立即绑定

在特定元素之间插入 div

在特定元素之间插入 div

PHP
肥皂起泡泡 2023-11-03 16:50:26
我之前构建了一些 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;


}



查看完整回答
反对 回复 2023-11-03
  • 1 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信