Cum să folosesc wp_get_recent_posts în WordPress?

12 aug. 2013, 18:08:40
Vizualizări: 18.3K
Voturi: 0

Încerc să afișez titlul și rezumatul celor mai recente 8 postări în bara laterală.

Am o listă unde:

  • Toate elementele se leagă la cea mai veche postare
  • Toate titlurile sunt "număr ID al postării care ar trebui afișată" + "titlul celei mai vechi postări"
  • Toate rezumatele sunt din cea mai veche postare

<?php
        $args = array( 'numberposts' => '8' );
        $recent_posts = wp_get_recent_posts( $args );
        $noticias_highlight = true;

        foreach( $recent_posts as $recent ){ 
?>
                    <div class="entry <?php if ($noticias_highlight) echo 'highlight'; $noticias_highlight = !$noticias_highlight; ?>">
                        <div class="title"><p><a href="<?php the_permalink($recent["ID"]); ?>"><?php the_title($recent["ID"]); ?></a></p></div>
                        <div class="subtitle"><?php the_excerpt($recent["ID"]); ?></div>
                    </div>
<?php
        } 
?>
0
Toate răspunsurile la întrebare 3
0
11

Nu folosiți metodele 'helper', ele tind să cauzeze mai multe probleme decât beneficii.

De fiecare dată când doriți să preluați postări, fie cele mai recente, cele mai vechi, dintr-o categorie etc., utilizați o buclă WP_Query, iată forma ei standard:

$query = new WP_Query( $args );
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // faci operații aici
    }
    wp_reset_postdata();
} else {
    // nu s-au găsit postări
}

Asta este ceea ce wp_recent_posts va face intern, deși nu o face foarte bine. Așadar, salvați codul de mai sus într-un macro de autocompletare în editorul vostru.

12 aug. 2013 18:15:17
0

Multe greșeli în codul din întrebare:

  • the_permalink() nu acceptă argumente și returnează link-ul postării curente. Folosește echo get_permalink() în loc.
  • the_title() afișează titlul postării curente, iar primul său argument este un șir de caractere care va fi afișat înaintea titlului. Acesta este motivul pentru care titlurile sunt toate la fel, dar conțin ID-urile numerice pentru postările corecte. Folosește echo get_the_title() în loc.
  • the_excerpt() nu acceptă argumente și afișează rezumatul postării curente. Nu știu dacă există o funcție similară care acceptă ID-ul postării ca argument.

Cel mai important:

  • wp_get_recent_posts() va returna un array care conține câte un array pentru fiecare postare (de aceea se folosește foreach). Deci, în loc de the_title() sau get_the_title(), titlul poate fi obținut prin $array[post_title], rezumatul prin $array[post_excerpt] (va fi gol dacă nu există rezumat, nu va trunchia automat conținutul postării), $array[post_content] pentru conținutul postării, etc.
  • wp_get_recent_posts() nu pare să folosească un loop WordPress. Deci funcțiile care folosesc postarea curentă vor folosi întotdeauna aceeași postare. Asta se întâmplă în exemplul dat.

Și cel mai important:

12 aug. 2013 19:07:12
2

Puteți folosi shortcode-ul Display Posts în marcajul barei laterale. Plugin-ul este disponibil aici: http://wordpress.org/plugins/display-posts-shortcode/

12 aug. 2013 20:24:52
Comentarii

Prefer să nu folosesc un plugin pentru funcționalități simple care pot fi realizate în câteva linii de cod.

That Brazilian Guy That Brazilian Guy
12 aug. 2013 21:12:06

Nu toți cei care citesc wordpress.stackoverflow trăiesc în codul PHP. Unii oameni sunt doar interesați să rezolve lucrurile. De ce să penalizăm soluții alternative?

dthorpe dthorpe
12 aug. 2013 21:21:59