Come usare wp_get_recent_posts?

12 ago 2013, 18:08:40
Visualizzazioni: 18.3K
Voti: 0

Sto cercando di visualizzare il titolo e l'estratto degli ultimi 8 post nella sidebar.

Ottengo una lista dove:

  • Tutti gli elementi puntano al post più vecchio
  • Tutti i titoli sono "numero id del post che dovrebbe essere visualizzato"+"titolo del post più vecchio"
  • Tutti gli estratti sono presi dal post più vecchio

<?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
Tutte le risposte alla domanda 3
0
11

Non utilizzare i metodi 'helper', tendono a causare più problemi di quanto valgano.

Ogni volta che vuoi recuperare post, che siano i più recenti, i più vecchi, in una categoria ecc., usa un loop WP_Query, ecco la sua forma standard:

$query = new WP_Query( $args );
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // fai qualcosa
    }
    wp_reset_postdata();
} else {
    // nessun post trovato
}

Questo è ciò che wp_recent_posts farà internamente, anche se non lo fa molto bene. Quindi salva il codice sopra in una macro di autocompletamento nel tuo editor

12 ago 2013 18:15:17
0

Molti errori nel codice della domanda:

  • the_permalink() non accetta argomenti e restituisce il link del post corrente. Usa echo get_permalink() invece.
  • the_title() stampa il titolo del post corrente, e il suo primo argomento è una stringa da stampare prima del titolo. Questo è ciò che causa i titoli tutti uguali ma contenenti gli ID numerici per i post corretti. Usa echo get_the_title() invece.
  • the_excerpt() non accetta argomenti e stampa l'estratto del post corrente. Non so se esista una funzione simile che accetti l'ID del post come argomento.

Soprattutto:

  • wp_get_recent_posts() restituirà un array contenente un array per ogni post (da qui il foreach). Quindi invece di the_title() o get_the_title() il titolo può essere restituito tramite $array[post_title], l'estratto tramite $array[post_excerpt] (sarà vuoto se non è presente un estratto, non troncherà automaticamente il contenuto del post), $array[post_content] per il contenuto del post, ecc.
  • wp_get_recent_posts() non sembra usare un loop di WordPress. Quindi le funzioni che usano il post corrente utilizzeranno sempre lo stesso post. Questo è ciò che accade nell'esempio.

E ancora più importante:

12 ago 2013 19:07:12
2

Puoi utilizzare lo shortcode Display Posts nel markup della tua sidebar. Il plugin è disponibile qui: http://wordpress.org/plugins/display-posts-shortcode/

12 ago 2013 20:24:52
Commenti

Preferisco non utilizzare un plugin per funzionalità semplici che possono essere ottenute con poche righe di codice.

That Brazilian Guy That Brazilian Guy
12 ago 2013 21:12:06

Non tutti coloro che leggono wordpress.stackoverflow vivono nel codice PHP. Alcune persone sono semplicemente interessate a ottenere le cose fatte. Perché penalizzare soluzioni alternative?

dthorpe dthorpe
12 ago 2013 21:21:59