web-dev-qa-db-fra.com

Comment afficher les 3 derniers articles (articles récents) dans une page statique?

Je voudrais implémenter quelque chose comme "messages récents" dans une page statique:

http://themes.codehunk.me/insignio/ (au pied de page)

Comment je pourrais le faire sans un widget?

8
user385917

J'utilise habituellement cette approche:

mauvaise approche

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

Avec l’aide de @swissspidy la bonne manière est celle-ci:

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

Voir @codex pour plus d’informations.

20
huckbit

Cela dépend de ce que vous allez faire. Si vous souhaitez créer une "page de publications" (autrement dit, créer un nouveau fichier de modèle de page), vous pouvez créer une boucle secondaire sur cette page.

Le codex en a un exemple et voici un autre exemple très dépouillé.

<?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 */ ?>

Si vous cherchez quelque chose que vous pouvez insérer dans n’importe quelle page, la meilleure solution serait un shortcode . Vous devez créer un shortcode qui récupère plusieurs articles et les renvoie dans une liste (ou ce que vous voulez). Un exemple:

<?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;
}
4
chrisguitarguy

Il existe un guide pour ce cas précis au codex wordpress. See it here : Je colle le code ici car il est assez court, pour plus d’informations, visitez le site 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; ?>
2
aseques

Wordpress fournit une fonction pour ce type de requête: query_posts () .

query_posts () est le moyen le plus simple de modifier la requête par défaut utilisée par WordPress pour afficher les publications. Utilisez query_posts () pour afficher des publications différentes de celles qui seraient normalement affichées à une URL spécifique.

Par exemple, sur la page d'accueil, vous devriez normalement voir les 10 derniers messages. Si vous voulez afficher seulement 5 articles (sans vous soucier de la pagination), vous pouvez utiliser query_posts () comme ceci:

query_posts ('posts_per_page = 5');

Une fois que vous avez effectué la requête, vous pouvez afficher les publications comme vous le souhaitez.

1
Anto