¿Cómo mostrar los últimos 3 posts (publicaciones recientes) en una página estática?

14 dic 2011, 14:56:29
Vistas: 162K
Votos: 17

Me gustaría implementar algo como "publicaciones recientes" en una página estática:

http://themes.codehunk.me/insignio/ (en el pie de página)

¿Cómo podría hacer esto sin usar un widget?

0
Todas las respuestas a la pregunta 5
1
35

Normalmente uso este enfoque:

enfoque incorrecto

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

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

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

<?php else : ?>

   <p><?php __('No hay noticias'); ?></p>

<?php endif; ?>

Con la ayuda de @swissspidy la forma correcta es esta:

<?php 
   // la consulta
   $the_query = new WP_Query( array(
     'category_name' => 'noticias',
      '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 hay noticias'); ?></p>
<?php endif; ?>

Consulta @codex para más información.

1 feb 2017 19:17:53
Comentarios

Me gusta hacer referencia a http://wordpress.stackexchange.com/a/1755/12404 para mostrar por qué usar query_posts() es casi siempre una mala idea.

swissspidy swissspidy
1 feb 2017 22:44:27
3

Depende de lo que estés buscando. Si quieres hacer una "página de entradas" — en otras palabras, crear un nuevo archivo de plantilla de página — puedes crear un bucle secundario en esa página.

El codex tiene un ejemplo de esto y aquí hay otro ejemplo muy simplificado.

<?php
/*
Template Name: Página de Entradas
*/
get_header(); 
?>

<?php while( have_posts() ): the_post(); /* iniciar bucle principal */ ?>

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

    <?php
        /* Iniciar Bucle Secundario */
        $other_posts = new WP_Query( /*quizás algunos argumentos aquí? */ );
        while( $others_posts->have_posts() ): $other_posts->the_post(); 
    ?>
        Puedes hacer cualquier cosa que harías en el bucle principal aquí y se aplicará
        a las entradas del bucle secundario
    <?php 
        endwhile; /* finalizar bucle secundario */ 
        wp_reset_postdata(); /* Restaurar la página consultada original a la variable $post */
    ?>

<?php endwhile; /* Finalizar el bucle principal */ ?>

Si buscas algo que puedas insertar en cualquier página, la mejor solución sería un shortcode. Necesitarías crear un shortcode que obtenga varias entradas y las devuelva en una lista (o lo que desees). Un ejemplo:

<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
 * Registra el shortcode con add_shortcode para que WP lo reconozca.
 */
function wpse36453_register_shortcode()
{
    add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}

/**
 * La función de callback para el shortcode. Devuelve nuestra lista de entradas.
 */
function wpse36453_shortcode_cb( $args )
{
    // obtener las entradas
    $posts = get_posts(
        array(
            'numberposts'   => 3
        )
    );

    // ¿No hay entradas? ¡salir!
    if( empty( $posts ) ) return '';

    /**
     * Recorrer cada entrada, obteniendo lo que necesitamos y añadiéndolo a 
     * la variable que enviaremos
     */ 
    $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
Comentarios

¿Puedo poner esto en header.php o debería colocarlo en otro lugar?

user385917 user385917
15 dic 2011 13:49:28

El primer ejemplo puede ir en cualquier parte de tu tema. El segundo ejemplo, el del shortcode, debería ir en functions.php

chrisguitarguy chrisguitarguy
15 dic 2011 18:35:10

el primer bloque de código no tiene un bucle para iterar sobre 3 publicaciones

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

Existe una guía para este caso preciso en el código de WordPress. Consúltala aquí: Pego el código aquí porque es bastante corto, para más información visita el sitio 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; ?>
26 oct 2012 16:19:01
0

WordPress proporciona una función para ese tipo de solicitud: query_posts().

query_posts() es la forma más fácil de alterar la consulta predeterminada que WordPress utiliza para mostrar publicaciones. Usa query_posts() para mostrar publicaciones diferentes a las que normalmente aparecerían en una URL específica.

Por ejemplo, en la página de inicio, normalmente verías las últimas 10 publicaciones. Si deseas mostrar solo 5 publicaciones (y no te importa la paginación), puedes usar query_posts() así:

query_posts( 'posts_per_page=5' );

Una vez que hayas realizado la consulta, puedes mostrar las publicaciones de la forma que desees.

14 dic 2011 15:25:19
1
-1
<?php $the_query = new WP_Query( 'posts_per_page=3' ); 
// Consulta para obtener los últimos 3 posts
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /* código HTML aquí etc */ the_title(); // Muestra el título del post ?>
<?php endwhile; wp_reset_postdata(); // Finaliza el loop y restablece los datos del post ?>
16 may 2019 14:21:23
Comentarios

es el código que responde a la pregunta - ¿Cómo mostrar los últimos 3 posts (publicaciones recientes) en una página estática? ¿Te ayudaría si digo - "Normalmente uso este enfoque:"?

Jon Jon
16 may 2019 15:25:22