我正在查看 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,发现除了 inline element 标签中的所有文本节点之外的所有文本节点都不在 ap 标签中。所以它们是包含内容的 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 新手,任何关于该片段的提示或反馈都将不胜感激。