Cómo estilizar el primer post en el loop como un post "nuevo/destacado"

26 oct 2011, 19:30:09
Vistas: 14.3K
Votos: 1

Espero poder explicarlo bien. Lo que estoy intentando hacer es usar el loop por defecto de WordPress para mostrar todos mis posts, pero para el primer post me gustaría que tenga un estilo completamente diferente dependiendo de la categoría padre en la que fue publicado, así que habría mucho contenido especial en ese primer post.

Actualmente lo estoy logrando parcialmente usando 2 loops que obtienen datos del loop por defecto. El primer loop es mi área de "post nuevo/destacado" y está configurado con posts_per_page=1. El segundo loop es el estándar, pero el problema es que obviamente muestra posts duplicados. Intenté usar offset=1 en el segundo loop pero entonces mi paginación deja de funcionar. Cualquier ayuda o dirección sería genial, sé que es mucho. Abajo está mi código para ambos loops y un enlace a mi sitio de pruebas. ¡Gracias!

Primer loop (nuevo/destacado):

<?php $custom_query = new WP_Query('posts_per_page=1'); 
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<?php
$parent_cat = array();
$post_cats = get_the_category($post->ID);
foreach( $post_cats as $post_cat ) {
if( $post_cat->parent ) $parent_cat[] = get_category( $post_cat->parent )->slug;
}
?>

<!--CONTENIDO AQUÍ-->


<?php endwhile; ?>
<?php wp_reset_postdata(); // reinicia la consulta ?>
<?php } else { ?>

Segundo loop (estándar):

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

<!--CONTENIDO AQUÍ-->


<?php endwhile; else: ?>
<?php _e('Lo sentimos, no hay posts que coincidan con tus criterios.'); ?>
<?php endif; ?>

Aquí hay un enlace al sitio de desarrollo donde puedes ver de lo que estoy hablando: http://themes.thefragilemachine.com/gone/

¡Gracias por cualquier ayuda!

0
Todas las respuestas a la pregunta 3
2

un bucle con una declaración condicional para capturar el primer post debería funcionar; ejemplo:

<?php if( $wp_query->current_post == 0 && !is_paged() ) : ?>
/*la salida del primer post*/
<?php else : ?>
/*la salida de todos los demás posts*/
<?php endif; ?>
26 oct 2011 19:54:20
Comentarios

También verifica si es is_archive() o !is_singular() para asegurarte de que la página no tenga una publicación única. No sé si is_paged() tiene el mismo efecto.

EarnestoDev EarnestoDev
26 oct 2011 19:57:38

esto parece estar funcionando pero solo muestra 1 publicación, y sin extracto, http://themes.thefragilemachine.com/gone/, me di cuenta de que tengo is_paged()

The Fragile Machine The Fragile Machine
26 oct 2011 20:11:48
1

Solo agrega una variable que funcionará una sola vez con PHP como en este ejemplo:

<?php $custom_query = new WP_Query('posts_per_page=1'); 
$i = 0; while($custom_query->have_posts()) : $custom_query->the_post(); ?>

<?php if($i==0){ 

// haz - muestra lo que quieras 

$i++; 

} else { 

// resto de los posts

} ?>  

<?php endwhile; ?>
<?php wp_reset_postdata(); // reinicia la consulta ?>
26 oct 2011 19:56:39
Comentarios

hmm.. Estoy recibiendo un error de sintaxis en esto

The Fragile Machine The Fragile Machine
26 oct 2011 20:27:36
0

Solo verifica el valor de current_post

if(0 == $custom_query->current_post){ /**es el primer post**/ }
20 oct 2017 22:29:32