Cum să stilizați primul post din loop ca un post „nou / recomandat”

26 oct. 2011, 19:30:09
Vizualizări: 14.3K
Voturi: 1

Sper că pot explica corect, ceea ce încerc să fac este să folosesc loop-ul implicit WordPress pentru a afișa toate postările, dar pentru prima postare aș dori să fie stilizată complet diferit în funcție de categoria părinte în care a fost publicată, așa că ar fi multe elemente în acea primă postare.

În prezent, realizez parțial acest lucru folosind 2 bucle care preiau ambele din loop-ul implicit. Prima buclă este zona mea pentru postarea „nouă / recomandată” și este setată la posts_per_page=1, apoi a doua buclă este loop-ul standard. Problema pe care o am este că evident afișează postări duplicate. Am încercat offset=1 la a doua buclă, dar atunci paginarea nu funcționează. Orice ajutor sau orientare ar fi minunat, știu că e mult. Mai jos este codul meu pentru ambele bucle și un link către site-ul de testare. Mulțumesc!

Prima buclă (nouă / recomandată):

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

<!--CONȚINUT AICI-->


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

A doua buclă (standard):

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

<!--CONȚINUT AICI-->


<?php endwhile; else: ?>
<?php _e('Ne pare rău, nicio postare nu corespunde criteriilor dumneavoastră.'); ?>
<?php endif; ?>

Aici este un link către site-ul de dezvoltare unde puteți vedea despre ce vorbesc: http://themes.thefragilemachine.com/gone/

Mulțumesc pentru orice ajutor!

0
Toate răspunsurile la întrebare 3
2

o buclă cu o condiție pentru a prinde primul post ar trebui să funcționeze; exemplu:

<?php if( $wp_query->current_post == 0 && !is_paged() ) : ?>
/*afișarea primului post*/
<?php else : ?>
/*afișarea tuturor celorlalte postări*/
<?php endif; ?>
26 oct. 2011 19:54:20
Comentarii

De asemenea, verifică dacă is_archive() sau !is_singular() pentru a te asigura că pagina nu are un singur post. Nu știu dacă is_paged() are același efect.

EarnestoDev EarnestoDev
26 oct. 2011 19:57:38

se pare că funcționează, dar afișează doar 1 post și niciun fragment, http://themes.thefragilemachine.com/gone/, am observat că am is_paged()

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

Adaugă doar o variabilă care va funcționa o singură dată cu PHP, ca în acest exemplu:

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

// faci - afișezi orice dorești 

$i++; 

} else { 

// restul articolelor

} ?>  

<?php endwhile; ?>
<?php wp_reset_postdata(); // resetează interogarea ?>
26 oct. 2011 19:56:39
Comentarii

hmm.. Primesc o eroare de sintaxă la asta

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

Doar verifică valoarea current_post

if(0 == $custom_query->current_post){ /**este primul post**/ }
20 oct. 2017 22:29:32