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


Risposte:


24

Di solito uso 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 __('No News'); ?></p>

<?php endif; ?>

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

<?php 
   // the 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 __('No News'); ?></p>
<?php endif; ?>

Vedi @codex per maggiori informazioni.


2
Mi piace fare riferimento a wordpress.stackexchange.com/a/1755/12404 per mostrare perché l'utilizzo query_posts()è quasi sempre una cattiva idea.
swissspidy,

4

Dipende da cosa stai cercando. Se vuoi fare una "pagina di post" - altre parole, crea un nuovo file modello di pagina - puoi creare un ciclo secondario su quella pagina.

Il codice ha un esempio di questo ed eccone un altro esempio molto ridotto.

<?php
/*
Template Name: Page of Posts
*/
get_header(); 
?>

<?php while( have_posts() ): the_post(); /* start main loop */ ?>

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

    <?php
        /* Start Secondary Loop */
        $other_posts = new WP_Query( /*maybe some args here? */ );
        while( $others_posts->have_posts() ): $other_posts->the_post(); 
    ?>
        You can do anything you would in the main loop here and it will
        apply to the secondary loop's posts
    <?php 
        endwhile; /* end secondary loop */ 
        wp_reset_postdata(); /* Restore the original queried page to the $post variable */
    ?>

<?php endwhile; /* End the main loop */ ?>

Se stai cercando qualcosa che puoi inserire in qualsiasi pagina, la soluzione migliore sarebbe uno shortcode . Dovresti creare un shortcode che recuperi diversi post e li ritorni in un elenco (o come vuoi). Un esempio:

<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
 * Registers the shortcode with add_shortcode so WP knows about it.
 */
function wpse36453_register_shortcode()
{
    add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}

/**
 * The call back function for the shortcode. Returns our list of posts.
 */
function wpse36453_shortcode_cb( $args )
{
    // get the posts
    $posts = get_posts(
        array(
            'numberposts'   => 3
        )
    );

    // No posts? run away!
    if( empty( $posts ) ) return '';

    /**
     * Loop through each post, getting what we need and appending it to 
     * the variable we'll send out
     */ 
    $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;
}

Posso metterlo in header.php o dovrei metterlo altrove?
user385917

Il primo esempio può andare ovunque nel tuo tema. Il secondo, shortcode, esempio dovrebbe entrarefunctions.php
chrisguitarguy il

il primo blocco di codice non ha un ciclo su 3 post
Murhaf Sousli,

3

C'è una guida per questo caso preciso nel codice wordpress. Guardalo qui : incollo il codice qui perché è piuttosto breve, per maggiori informazioni vai al sito wordpress.org.

<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post); ?> 
    <div>
        <?php the_date(); ?>
        <br />
        <?php the_title(); ?>   
        <?php the_excerpt(); ?>
    </div>
<?php endforeach; ?>

1

Wordpress fornisce una funzione per quel tipo di richiesta: query_posts () .

query_posts () è il modo più semplice per modificare la query predefinita che WordPress utilizza per visualizzare i post. Utilizzare query_posts () per visualizzare post diversi da quelli che verrebbero normalmente visualizzati in un URL specifico.

Ad esempio, sulla home page, normalmente vedresti gli ultimi 10 post. Se vuoi mostrare solo 5 post (e non preoccuparti della paginazione), puoi usare query_posts () in questo modo:

query_posts ('posts_per_page = 5');

Dopo aver eseguito la query, è possibile visualizzare i post nel modo desiderato.


-1
<?php $the_query = new WP_Query( 'posts_per_page=3' ); 
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /*html in here etc*/ the_title(); ?>
<?php endwhile;wp_reset_postdata();?>

il suo codice che risponde alla domanda: come visualizzare gli ultimi 3 post (post recenti) in una pagina statica? Ti sarebbe di aiuto se dicessi: "Di solito uso questo approccio:"?
Jon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.