1

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>

textContentを編集するphpDOMパーサーを使用していましたが、インライン要素タグ内のテキストノードを除くすべてのテキストノードが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の初心者であり、そのスニップに関するヒントやフィードバックをいただければ幸いです。

4

0 に答える 0