Modifica questo loop per adattarlo al mio slider jQuery (slides)
Sto cercando di creare uno slider che mostri le thumbnail da un custom post type specifico, visualizzandone 4 per ogni "slide". Lo slider e le thumbnail funzionano correttamente, ma non sono sicuro di come modificare il loop per fargli visualizzare 4 post in un contenitore, poi ripetere con i successivi 4 post e così via.
Il mio loop è questo:
<div id="slides">
<div class="slides_container">
<?php $loop = new WP_Query(array('post_type' => 'fastighet', 'posts_per_page' => -1, 'orderby'=> 'ASC')); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="slide">
<?php $url = get_post_meta($post->ID, "url", true);
if($url!='') {
echo '<a href="'.$url.'">';
echo the_post_thumbnail('admin-list-thumb');
echo '</a>';
} else {
echo the_post_thumbnail('admin-list-thumb');
} ?>
<div class="caption">
<h5><?php the_title(); ?></h5>
</div>
</div>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div> <!-- fine .slides_container -->
<a href="#" class="prev">prec</a>
<a href="#" class="next">succ</a>
</div> <!-- fine .slides -->
Ogni div con la classe slide diventa una slide come puoi vedere. Ma come posso fare per inserire 4 post in ogni slide, poi altri 4 post in un'altra slide e così via?
Qualsiasi aiuto o suggerimento sarebbe davvero apprezzato!
Provato una matematica molto semplice. <div class="slide">
verrà stampato dopo ogni 4 post. Quindi, un'istruzione if con la logica old school $i%4 == 0
<div class="slides_container">
<?php
$args = array(
'post_type' => 'fastighet',
'numberposts' => -1,
'orderby' => 'ASC'
);
$posts = get_posts($args);
?>
<?php $i = 0; foreach($posts as $post): ?>
<?php if($i%4 == 0): ?>
<div class="slide">
<?php endif;
$url = get_post_meta($post->ID, "url", true);
if($url) {
echo '<a href="'.$url.'">';
echo the_post_thumbnail('admin-list-thumb');
echo '</a>';
} else {
echo the_post_thumbnail('admin-list-thumb');
} ?>
<div class="caption">
<h5><?php the_title(); ?></h5>
</div>
<?php if($i%4 == 3): ?></div> <!--fine .slide--><?php endif; ?>
<?php $i++; endforeach; ?>
</div> <!-- fine .slides_container -->
Fammi sapere come va. Grazie!

Sembra che ottenga ancora solo un'immagine per slide per qualche motivo. Inoltre le miniature non linkano a nulla, anche se dovrebbero linkare a ciascun post.

Sì ho notato il <?php mancante, e l'ho aggiunto. Però non è cambiato nulla. Ottengo ancora solo uno slide per immagine :/

Ho aggiornato il mio codice per far funzionare altre cose. Ottengo ancora solo una miniatura di post per slide però.

prova a fare echo $i
per vedere se il valore si incrementa. Quanti risultati ottieni? Hai un paio di post da mostrare giusto?

@Sisir: Non so come fare. Cosa dovrei digitare esattamente?
Probabilmente c'è qualcosa di sbagliato nel codice, non genera i div come dovrebbe. Dai un'occhiata a questo: http://i.imgur.com/avdcs.png

aggiungi echo 'Valore di $i: '.$i
prima di $i++
dovresti vedere il valore incrementale di $i
. E prova a disabilitare javascript e verifica se javascript sta modificando il div.

Dove dovrei fare echo di questo valore? Da qualche parte dentro il loop? Se faccio echo di quel valore prima dell'endwhile ottengo: Valore di $i: 0 Valore di $i: 1 Valore di $i: 2
Lo slideshow funziona come previsto se sostituisco la parte del loop wordpress con semplice html statico. Questo mi fa pensare che sia ancora un problema con il loop.

$i
incrementa correttamente. Ho modificato il codice. Ora ho usato get_posts()
. Controlla se abbiamo fortuna questa volta :) Se non funziona, vieni in chat "Stoppress" http://chat.stackexchange.com/rooms/6/stoppress

Sembra che non riesca a scrivere nulla nella chat. Mi servono 20 di reputazione. Un giorno! :D C'è un altro modo per contattarti su questo sito? Non riesco a trovarne.

continuiamo questa discussione nella chat

Il problema con il codice sembra essere che invece di mettere 4 elementi in uno slide, poi creare un nuovo slide ecc... il codice fa sì che ogni quarto elemento finisca in uno slide.

Il tuo codice attuale, con qualche piccolo aggiustamento, mi ha dato esattamente quello che volevo. Grazie!

Quasi corretto. L'unico problema era che in realtà non vuoi stampare sia l'apertura che la chiusura sullo stesso indice. Il seguente codice funziona per me in una situazione simile. L'unica vera modifica è che $i inizia da 1 e stampa i tag di apertura e chiusura degli slide su conteggi diversi.
Ho anche preso la libertà di pulire un po' il codice.
<div id="slides">
<div class="slides_container">
<?php
$loop = new WP_Query( array(
'post_type' => 'fastighet',
'posts_per_page' => -1
) );
$i = 1;
while ( $loop->have_posts() ) :
$loop->the_post();
if( $i % 4 == 1 ) :
?>
<div class="slide">
<?php
endif;
?>
<div class="fastighet-slider-entry">
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail(); ?></a>
<div class="caption">
<h5><?php the_title(); ?></h5>
</div>
</div> <!-- fine .fastighet-slider-entry -->
<?php
if( $i % 4 == 0 ) :
?>
</div>
<?php
endif;
++$i;
endwhile;
wp_reset_query();
?>
</div> <!-- fine .slides_container -->
<a href="#" class="prev">precedente</a>
<a href="#" class="next">successivo</a>
</div> <!-- fine .slides -->
