Extrage primul paragraf din fiecare postare WordPress

20 dec. 2013, 13:47:53
Vizualizări: 13.9K
Voturi: 3

Am un cod care folosește preg_match pentru a extrage primul paragraf și apoi îl afișează în loop:

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

Totuși, există o mică problemă cu această abordare. Funcționează doar când încadrez manual textul în tag-uri <p> </p> în editor și nu în alte cazuri. Expresiile regulate nu sunt punctul meu forte, așa că orice ajutor sau explicație suplimentară ar fi minunată.

Și această variantă funcționează, de asemenea includând imaginile/iframe-urile în tag-uri p:

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;
}
0
Toate răspunsurile la întrebare 2
0

Puteți utiliza această funcție:

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

apoi o puteți apela în loop-ul dvs. cu:

<?php echo get_first_paragraph(); ?>

Partea magică pe care o căutați este wpautop, o funcție WordPress, care va converti întreruperile de linie duble din text în paragrafe corecte.

Cu wpautop în loc, puteți apoi utiliza funcția PHP substr pentru a obține primul paragraf începând de la primul caracter până când ajunge la închiderea primului paragraf, apoi adăugați 4 caractere astfel încât eticheta de închidere să nu fie eliminată.


Pentru a extinde în continuare acest lucru, dacă doriți să obțineți totul în afară de primul paragraf, puteți utiliza această funcție complementară care va începe de la sfârșitul etichetei de închidere a primului paragraf și va obține totul după aceasta:

function get_the_post(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, (strpos( $str, '</p>')));
    return $str;
}

și o puteți apela în loop cu:

<?php echo get_the_post(); ?>
29 mai 2014 07:01:30
3

Încearcă asta:

function primul_paragraf() {
    global $post, $posts;
    $continut_post = $post->post_content;
    $continut_post = apply_filters('the_content', $continut_post);
    $continut_post = str_replace('</p>', '', $continut_post);
    $paragrafe = explode('<p>', $continut_post);
    array_shift($paragrafe);

    return $paragrafe[0]; 
}
20 dec. 2013 13:57:29
Comentarii

Nu! Asta nu produce nimic, chiar și când adaug manual <p> în editor. Are legătură cu faptul că post_content nu se formatează ca the_content()?

tmyie tmyie
20 dec. 2013 14:06:23

WordPress va adăuga automat tag-uri <p> conținutului tău, asta face apply_filters('the_content'); și wpautop, este ciudat că nu funcționează pentru că am luat asta de pe un site la care am lucrat recent dar a extras primele două paragrafe ca să le pot pune în 2 coloane.. Nu sunt sigur în acest moment - trebuie să îmi dai mai mult cod (referitor la loop etc unde vrei să afișezi conținutul).

Nathan Fitzgerald - Fitzgenius Nathan Fitzgerald - Fitzgenius
20 dec. 2013 14:09:19

Hei Nathan, mulțumesc. Am schimbat funcția mea, dar se pare că funcționează doar pe ultimul post, nu pe toate.

tmyie tmyie
20 dec. 2013 14:12:09