wordpress the_content()形成裸文本节点

时间:2012-08-22 21:52:54

标签: wordpress formatting

我正在查看WordPress函数the_content()的源输出,并注意到html格式很奇怪。

<div>
    <p> <inline element> 'text node' </inline element> </p>
    'text node'
    <p> <inline element> 'text node' </inline element> </p>
    'text node'
</div>

我正在使用php DOM解析器编辑textContent,并发现除了内联元素标记中的文本节点之外的所有文本节点都不在p标记中。 所以它们是包含内容的div标签的textContent。

我想知道这是我的错,还是wordPress输出不好。我认为这种广泛使用的cms不太可能有这样一个基本的格式化问题。

编辑: 我仍然不知道其他主题开发人员是否已经使用wordPress找到了这个问题。 无论如何我写了一个小剪辑来解决它。

function setDOM(){
$html = get_the_content();
$html = trim( preg_replace( '/\s+/', ' ', $html ) ); 
$dom = new DOMDocument;
$dom->loadHTML($html);

$xpath = new DOMXpath($dom);
$textNodes = $xpath->query('//text()');

foreach($textNodes as $textNode){
    $parent = $textNode->parentNode;
    if (($parent->nodeName !== 'em') &&
    ($parent->nodeName !== 'strong') &&
    ($parent->nodeName !== 'a') &&
    ($parent->nodeName !== 'dt')) {

        $txt = $textNode->textContent;  
        $newP = $dom->createElement('p');
        $newTxt = $dom->createTextNode($txt);
        $newP->appendChild($newTxt);

        $parent->replaceChild($newP, $textNode);

    }
}
$dom->saveHTML();
return $dom;
}

$dom = setDOM();

echo $dom->saveHTML();

我无疑是一名PHP新手,有关该剪辑的任何提示或反馈,我们将不胜感激。

0 个答案:

没有答案