Ich habe einen Code, der preg_match verwendet, um den ersten Absatz zu erfassen und ihn dann in der Schleife auszuspucken:
function first_paragraph() {
global $post, $posts;
$first_para = '';
ob_start();
ob_end_clean();
$output = preg_match_all('%(<p[^>]*>.*?</p>)%i', $post->post_content, $matches);
$first_para = $matches [1] [0];
echo $first_para;
}
Es gibt jedoch ein kleines Problem damit. Es funktioniert nur, wenn ich Text manuell in <p> </p>
Tags im Editor einbinde, und nicht anders. Reguläre Ausdrücke sind sicherlich nicht mein Glück, daher wäre jede Hilfe und jedes weitere Verständnis großartig.
Und das funktioniert, auch die Bilder/Iframes in p-Tags:
function first_paragraph() {
global $post, $posts;
$first_para = '';
ob_start();
ob_end_clean();
$post_content = $post->post_content;
$post_content = apply_filters('the_content', $post_content);
$output = preg_match_all('%(<p[^>]*>.*?</p>)%i', $post_content, $matches);
$first_para = $matches [1] [0];
echo $first_para;
}
Sie können diese Funktion verwenden:
function get_first_paragraph(){
global $post;
$str = wpautop( get_the_content() );
$str = substr( $str, 0, strpos( $str, '</p>' ) + 4 );
$str = strip_tags($str, '<a><strong><em>');
return '<p>' . $str . '</p>';
}
und rufen Sie es dann in Ihrer Schleife auf mit:
<?php echo get_first_paragraph(); ?>
Der magische Teil, den Sie suchen, ist wpautop , eine Wordpress-Funktion, die doppelte Zeilenumbrüche im Text in richtige Absätze umwandelt.
Mit wpautop können Sie dann die PHP -Funktion substr verwenden, um den ersten Absatz beginnend mit dem ersten Zeichen bis zum ersten abschließenden Absatz abzurufen, und dann 4 Zeichen hinzufügen, damit der Abschluss erfolgt Tag wird nicht entfernt.
Um dies weiter zu erweitern, können Sie diese ergänzende Funktion verwenden, die am Ende des ersten schließenden Absatz-Tags beginnt und alles danach abruft:
function get_the_post(){
global $post;
$str = wpautop( get_the_content() );
$str = substr( $str, (strpos( $str, '</p>')));
return $str;
}
und rufen Sie es in der Schleife mit:
<?php echo get_the_post(); ?>
Versuche dies:
function first_paragraph() {
global $post, $posts;
$post_content = $post->post_content;
$post_content = apply_filters('the_content', $post_content);
$post_content = str_replace('</p>', '', $post_content);
$paras = explode('<p>', $post_content);
array_shift($paras);
return $paras[0];
}