Come stilizzare il primo post nel loop come "nuovo/in evidenza" in WordPress

26 ott 2011, 19:30:09
Visualizzazioni: 14.3K
Voti: 1

Spero di riuscire a spiegarmi correttamente. Quello che sto cercando di fare è utilizzare il loop predefinito di WordPress per mostrare tutti i miei post, ma per il primo post vorrei applicare uno stile completamente diverso in base alla categoria genitore in cui è stato pubblicato. Ci sarebbe molto da personalizzare in quel primo post.

Attualmente sto ottenendo parzialmente questo risultato utilizzando 2 loop che attingono entrambi dal default. Il primo loop è l'area del mio post "nuovo/in evidenza" ed è impostato con posts_per_page=1, mentre il secondo loop è il loop standard. Il problema che sto riscontrando è che ovviamente mostra post duplicati. Ho provato ad usare offset=1 nel secondo loop, ma così la mia paginazione smette di funzionare. Qualsiasi aiuto o indicazione sarebbe fantastico, so che è complesso. Di seguito il mio codice per entrambi i loop e un link al sito di test. Grazie!

Primo loop (nuovo/in evidenza):

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

<!--CONTENUTO QUI-->


<?php endwhile; ?>
<?php wp_reset_postdata(); // reset della query ?>
<?php } else { ?>

Secondo loop (standard):

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

<!--CONTENUTO QUI-->


<?php endwhile; else: ?>
<?php _e('Spiacente, nessun post corrisponde ai tuoi criteri.'); ?>
<?php endif; ?>

Ecco un link al sito di sviluppo dove puoi vedere di cosa sto parlando: http://themes.thefragilemachine.com/gone/

Grazie per qualsiasi aiuto!

0
Tutte le risposte alla domanda 3
2

un ciclo con un'istruzione condizionale per catturare il primo post dovrebbe funzionare; esempio:

<?php if( $wp_query->current_post == 0 && !is_paged() ) : ?>
/*l'output del primo post*/
<?php else : ?>
/*l'output di tutti gli altri post*/
<?php endif; ?>
26 ott 2011 19:54:20
Commenti

Controlla anche is_archive() o !is_singular() per assicurarti che la pagina non abbia un singolo post. Non so se is_paged() abbia lo stesso effetto.

EarnestoDev EarnestoDev
26 ott 2011 19:57:38

sembra funzionare ma mostra solo 1 post e nessun estratto, http://themes.thefragilemachine.com/gone/, ho notato che ho is_paged()

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

Aggiungi semplicemente una variabile che funzionerà una sola volta con PHP come in questo esempio:

<?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){ 

// fai - echo quello che vuoi 

$i++; 

} else { 

// resto dei post

} ?>  

<?php endwhile; ?>
<?php wp_reset_postdata(); // resetta la query ?>
26 ott 2011 19:56:39
Commenti

hmm.. Sto ricevendo un errore di sintassi su questo

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

Controlla semplicemente il valore di current_post

if(0 == $custom_query->current_post){ /**è il primo post**/ }
20 ott 2017 22:29:32