webentwicklung-frage-antwort-db.com.de

Besorgen Sie sich den ersten Absatz jedes Beitrags

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;
}
2
tmyie

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(); ?>
2
davidcondrey

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]; 
}