Der Filter “Excerpt” fügt “” an einer falschen Stelle ein

Ich verwende den folgenden Code aus dieser Frage , um die Auszugslänge auf 2 Absätze zu begrenzen.

if ( ! function_exists( 'wpse0001_custom_wp_trim_excerpt' ) ) : function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) { global $post; $raw_excerpt = $wpse0001_excerpt; if ( '' == $wpse0001_excerpt ) { $wpse0001_excerpt = get_the_content(''); $wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt ); $wpse0001_excerpt = apply_filters('the_content', $wpse0001_excerpt); // Here we choose how many paragraphs do we want to cutthe excerpt at, This part thanks to Clément Malet $wpse0001_excerpt = "

$wpse0001_excerpt

"; $wanted_number_of_paragraph = 1; $tmp = explode ('

', $wpse0001_excerpt); for ($i = 0; $i < $wanted_number_of_paragraph; ++$i) { if (isset($tmp[$i]) && $tmp[$i] != '') { $tmp_to_add[$i] = $tmp[$i]; } } $wpse0001_excerpt = implode('

', $tmp_to_add) . '

'; $wpse0001_excerpt = str_replace(']]>', ']]>', $wpse0001_excerpt); $excerpt_end = ' ' . ' » ' . sprintf(__( 'Read more about: %s  »', 'pietergoosen' ), get_the_title()) . ''; $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); //$pos = strrpos($wpse0001_excerpt, '</'); //if ($pos !== false) // Inside last HTML tag //$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0); //else // After the content $wpse0001_excerpt .= $excerpt_end; return $wpse0001_excerpt; } return apply_filters('wpse0001_custom_wp_trim_excerpt', $wpse0001_excerpt, $raw_excerpt); } endif; remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'wpse0001_custom_wp_trim_excerpt');

Ich habe $wanted_number_of_paragraph auf 2 .

Wenn mehr als ein Absatz in einem Post gefunden wird, ist das Ergebnis korrekt:

 

Text

Text

Wenn nur ein Absatz in einem Post gefunden wird, ist das Ergebnis falsch:

 

Text

Ich habe versucht, ein bisschen den obigen Code zu ändern, aber keine meiner Modifikationen funktioniert. Irgendwelche Ideen, warum das passiert?

Solutions Collecting From Web of "Der Filter “Excerpt” fügt “” an einer falschen Stelle ein"

Es passiert, weil die Verwendung von explode() , um HTML zu analysieren, mindestens genauso schlimm ist wie der Versuch, es mit Regex zu tun.

Um es, die schnelle ‘n schmutzige Weise zu reparieren, konnten Sie die folgende preg_replace() nach der implode() Linie hinzufügen:

 $wpse0001_excerpt = implode( '', $tmp_to_add ).''; $wpse0001_excerpt = preg_replace( '/< \/p>\s*< \/p>/', '', $wpse0001_excerpt ); 

Etwas wie die DOM-Erweiterung von PHP wäre sauberer. Dies ist jedoch nicht mehr mit WordPress verbunden.