Streifen aus
oder etwas besser?

Auf der Suche nach etwas Hilfe auf etwas, das mich wirklich erwägt, blockquotes für den Moment nicht zu verwenden!

Ich habe diesen Code:

<?php $show_after_p = 1; $content = apply_filters( 'the_content', get_the_content() ); if(substr_count($content, '

') > $show_after_p) { $contents = explode('

', $content); $p_count = 1; foreach($contents as $content) { $content = str_replace('

', '', $content); echo wpautop($content); if($p_count == $show_after_p) { get_template_part('_templates/box'); } $p_count++; } } ?>

Der Grund für den wpautop ist, einen kurzen Code im Inhalt zu fixieren, und die Art, wie die Box vor dem ersten

eingefügt wird, statt danach. Da die Box vor dem ersten

-Tag eingefügt wird, fügt sie in einem Blockquote dazwischen ein:

 

The quote

Also suche ich nach einer Möglichkeit, das

aus der

(ich weiß, es ist nicht semantisch korrekt, aber das Internet muss damit heilen!) ODER etwas Besseres ..

Ich habe auch das functions Tag hinzugefügt, falls jemand von dort das in eine function umwandeln könnte, da ich mehr als einen Post-Typ habe, für den das gilt:

Solutions Collecting From Web of "Streifen aus
oder etwas besser?"

HTML mit regulären Ausdrücken zu manipulieren ist keine gute Idee. Ich schlage vor, dass Sie DOMDocument verwenden :

 // input $html = apply_filters('the_content', get_the_content()); $dom = new \DomDocument(); $dom->loadHtml($html); $blockquotes = $dom->getElementsByTagName('blockquote'); foreach($blockquotes as $blockquote){ foreach($blockquote->childNodes as $e){ if($e->nodeName === 'p'){ // create a text node with the contents of the 

$blockquote->insertBefore($dom->createTextNode($e->textContent), $e); // remove

$blockquote->removeChild($e); } } } // remove doctype $dom->removeChild($dom->firstChild); $dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild); print $dom->saveHtml();

Vielleicht können Sie eine einfache Preg_replace verwenden, aber Sie müssen in diesem Beispiel Leerzeichen um P entfernen

$ result = preg_replace (‘

] > (?: \ s + | (?:) + | (?:) +) ‘, ”, $ Inhalt);

Wenn Sie keine Tags innerhalb von blockquote verwenden, können Sie strip_tags($content); um alle HTML-Tags zu entfernen