Como exibir as últimas 3 postagens (postagens recentes) em uma página estática?

Respostas:

24

Eu costumo usar esta abordagem:

abordagem errada

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

Com a ajuda de @swissspidy, a maneira correta é esta:

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

Veja @codex para mais informações.

huckbit
fonte
2
Eu gosto de me referir a wordpress.stackexchange.com/a/1755/12404 para mostrar por que usar query_posts()é quase sempre uma má idéia.
swissspidy
4

Depende do que você está procurando. Se você deseja criar uma "página de postagens" - em outras palavras, crie um novo arquivo de modelo de página - você pode criar um loop secundário nessa página.

O codex tem um exemplo disso e aqui está outro exemplo muito simples.

<?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 você está procurando algo que possa ser inserido em qualquer página, a melhor solução seria um código de acesso . Você precisaria criar um código de acesso que busque várias postagens e as retorne em uma lista (ou o que você quiser). Um exemplo:

<?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;
}
chrisguitarguy
fonte
Posso colocar isso no header.php ou devo colocá-lo em outro lugar?
user385917
O primeiro exemplo pode ir a qualquer lugar no seu tema. O segundo exemplo, shortcode, deve entrarfunctions.php
chrisguitarguy
o primeiro bloco de código não precisa repetir 3 postagens
Murhaf Sousli
3

Há um guia para este caso preciso no codex wordpress. Veja aqui : eu colo o código aqui porque é bastante curto, para obter mais informações, acesse o 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; ?>
aseques
fonte
1

O Wordpress fornece uma função para esse tipo de solicitação: query_posts () .

query_posts () é a maneira mais fácil de alterar a consulta padrão que o WordPress usa para exibir postagens. Use query_posts () para exibir postagens diferentes daquelas que normalmente apareceriam em um URL específico.

Por exemplo, na página inicial, você normalmente veria as 10 últimas postagens. Se você deseja mostrar apenas 5 postagens (e não se importa com paginação), pode usar query_posts () assim:

query_posts ('posts_per_page = 5');

Depois de executar a consulta, você pode exibir as postagens da maneira que desejar.

Anto
fonte
-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();?>
Jon
fonte
seu código que responde à pergunta - Como exibir as últimas 3 postagens (postagens recentes) em uma página estática? Ajudaria você se eu dissesse - "Eu costumo usar essa abordagem:"?
19619 Jon