Extrage primul paragraf din fiecare postare WordPress
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;
}

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

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

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()?

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).
