Come visualizzare gli ultimi 3 post (post recenti) in una pagina statica?

14 dic 2011, 14:56:29
Visualizzazioni: 162K
Voti: 17

Vorrei implementare qualcosa come "post recenti" in una pagina statica:

http://themes.codehunk.me/insignio/ (nel footer)

Come potrei fare questo senza usare un widget?

0
Tutte le risposte alla domanda 5
1
35

Di solito utilizzo questo approccio:

approccio sbagliato

<?php query_posts( array(
   'category_name' => 'news',
   'posts_per_page' => 3,
)); ?>

<?php if( have_posts() ): while ( have_posts() ) : the_post(); ?>

   <?php the_excerpt(); ?>
   <?php endwhile; ?>

<?php else : ?>

   <p><?php __('Nessuna Notizia'); ?></p>

<?php endif; ?>

Con l'aiuto di @swissspidy il modo corretto è questo:

<?php 
   // la query
   $the_query = new WP_Query( array(
     'category_name' => 'news',
      'posts_per_page' => 3,
   )); 
?>

<?php if ( $the_query->have_posts() ) : ?>
  <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <?php the_title(); ?>
    <?php the_excerpt(); ?>

  <?php endwhile; ?>
  <?php wp_reset_postdata(); ?>

<?php else : ?>
  <p><?php __('Nessuna Notizia'); ?></p>
<?php endif; ?>

Vedi @codex per maggiori informazioni.

1 feb 2017 19:17:53
Commenti

Mi piace fare riferimento a http://wordpress.stackexchange.com/a/1755/12404 per mostrare perché usare query_posts() è quasi sempre una cattiva idea.

swissspidy swissspidy
1 feb 2017 22:44:27
3

Dipende un po' da cosa stai cercando di ottenere. Se vuoi creare una "pagina di articoli" - in altre parole, creare un nuovo file di template per la pagina - puoi creare un loop secondario su quella pagina.

Il codex contiene un esempio di questo e qui c'è un altro esempio molto semplificato.

<?php
/*
Template Name: Pagina di Articoli
*/
get_header(); 
?>

<?php while( have_posts() ): the_post(); /* inizia il loop principale */ ?>

    <h1><?php the_title(); ?></h1>

    <?php
        /* Inizia il Loop Secondario */
        $other_posts = new WP_Query( /*potresti inserire degli argomenti qui? */ );
        while( $others_posts->have_posts() ): $other_posts->the_post(); 
    ?>
        Puoi fare qualsiasi cosa che faresti nel loop principale qui e verrà
        applicato agli articoli del loop secondario
    <?php 
        endwhile; /* fine del loop secondario */ 
        wp_reset_postdata(); /* Ripristina la pagina originale interrogata nella variabile $post */
    ?>

<?php endwhile; /* Fine del loop principale */ ?>

Se stai cercando qualcosa che puoi inserire in qualsiasi pagina, la soluzione migliore sarebbe un shortcode. Dovresti creare uno shortcode che recupera diversi articoli e li restituisce in una lista (o in qualsiasi altro formato desideri). Ecco un esempio:

<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
 * Registra lo shortcode con add_shortcode così che WordPress ne sia a conoscenza.
 */
function wpse36453_register_shortcode()
{
    add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}

/**
 * La funzione di callback per lo shortcode. Restituisce la nostra lista di articoli.
 */
function wpse36453_shortcode_cb( $args )
{
    // ottieni gli articoli
    $posts = get_posts(
        array(
            'numberposts'   => 3
        )
    );

    // Nessun articolo? scappa!
    if( empty( $posts ) ) return '';

    /**
     * Scorri ogni articolo, prendi ciò di cui hai bisogno e aggiungilo alla
     * variabile che restituiremo
     */ 
    $out = '<ul>';
    foreach( $posts as $post )
    {
        $out .= sprintf( 
            '<li><a href="%s" title="%s">%s</a></li>',
            get_permalink( $post ),
            esc_attr( $post->post_title ),
            esc_html( $post->post_title )
        );
    }
    $out .= '</ul>';
    return $out;
}
14 dic 2011 16:01:45
Commenti

Posso inserirlo in header.php o dovrei metterlo da qualche altra parte?

user385917 user385917
15 dic 2011 13:49:28

Il primo esempio può essere inserito ovunque nel tuo tema. Il secondo esempio, quello con lo shortcode, dovrebbe essere inserito in functions.php

chrisguitarguy chrisguitarguy
15 dic 2011 18:35:10

il primo blocco di codice non ha un ciclo per iterare su 3 post

Murhaf Sousli Murhaf Sousli
10 giu 2014 04:09:18
0

C'è una guida per questo caso preciso nel codex di WordPress. Vedi qui: Incollo il codice qui perché è abbastanza breve, per maggiori informazioni vai sul sito wordpress.org.

<?php
// Recupera 10 post ordinati per titolo in ordine crescente
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );

// Loop attraverso ogni post
foreach ($postslist as $post) :  setup_postdata($post); ?> 
    <div>
        <?php the_date(); ?> // Mostra la data del post
        <br />
        <?php the_title(); ?> // Mostra il titolo del post  
        <?php the_excerpt(); ?> // Mostra l'estratto del post
    </div>
<?php endforeach; ?>
26 ott 2012 16:19:01
0

WordPress fornisce una funzione per questo tipo di richiesta: query_posts().

query_posts() è il modo più semplice per modificare la query predefinita che WordPress utilizza per visualizzare gli articoli. Usa query_posts() per mostrare articoli diversi da quelli che normalmente apparirebbero a un URL specifico.

Ad esempio, nella homepage, normalmente vedresti gli ultimi 10 articoli. Se vuoi mostrarne solo 5 (e non ti interessa la paginazione), puoi usare query_posts() in questo modo:

query_posts( 'posts_per_page=5' );

Una volta eseguita la query, puoi visualizzare gli articoli nel modo che preferisci.

14 dic 2011 15:25:19
1
-1
<?php $the_query = new WP_Query( 'posts_per_page=3' ); 
// Esegue una query per ottenere gli ultimi 3 post
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /* codice html qui etc */ the_title(); // Mostra il titolo del post ?>
<?php endwhile; // Fine del ciclo
wp_reset_postdata(); // Reimposta i dati del post ?>
16 mag 2019 14:21:23
Commenti

codice che risponde alla domanda - Come visualizzare gli ultimi 3 post (post recenti) in una pagina statica? Ti aiuterebbe se dicessi - "Di solito uso questo approccio:"?

Jon Jon
16 mag 2019 15:25:22