在特定元素之间插入 div

我之前构建了一些 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' );


肥皂起泡泡
浏览 125回答 1
1回答

慕尼黑5688855

通过正则表达式解析 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;}
打开App,查看更多内容
随时随地看视频慕课网APP