Cum să modific bucla pentru a se potrivi cu slider-ul meu jQuery (slide-uri)
Încerc să creez un slider care preia miniaturi dintr-un anumit tip de postare personalizată și afișează câte patru pentru fiecare "slide". Am reușit să fac slider-ul și miniaturile să funcționeze corect, dar nu sunt sigur cum să modific bucla pentru a afișa 4 postări într-un container, apoi să repete cu următoarele 4 postări și așa mai departe.
Bucla mea arată astfel:
<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> <!-- sfârșit .slides_container -->
<a href="#" class="prev">prev</a>
<a href="#" class="next">next</a>
</div> <!-- sfârșit .slides -->
Fiecare div cu clasa slide devine un slide, după cum poți vedea. Dar cum pot face să pună 4 postări în fiecare astfel de slide, apoi încă 4 postări în următorul slide etc.
Orice ajutor sau sfat ar fi foarte apreciat!

Am încercat o matematică foarte simplă. <div class="slide">
se va afișa după fiecare 4 postări. Deci, o condiție if cu logica veche $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> <!--sfârșit .slide--><?php endif; ?>
<?php $i++; endforeach; ?>
</div> <!-- sfârșit .slides_container -->
Spune-mi cum merge. Mulțumesc!

Se pare că tot primesc doar o singură imagine pe slide din nu știu ce motiv. De asemenea, thumbnail-urile nu sunt legate la nimic, deși ar trebui să fie legate la fiecare post.

Da, am observat lipsa <?php și am adăugat-o. Totuși, nimic nu s-a schimbat. Încă primesc doar un slide per imagine :/

Am actualizat codul meu ca să funcționeze și alte lucruri. Totuși, primesc doar o singură imagine în miniatură pentru fiecare slide.

încearcă să afișezi $i
pentru a vedea dacă valoarea crește. Câte rezultate obții? Ai mai multe articole de afișat, nu?

@Sisir: Nu știu cum să fac asta. Ce ar trebui să scriu mai exact?
Probabil este ceva greșit în cod, nu generează div-urile așa cum ar trebui. Uită-te la asta: http://i.imgur.com/avdcs.png

adaugă echo 'Valoarea lui $i: '.$i
înainte de $i++
ar trebui să vezi valoarea incrementată a lui $i
. Și încearcă să dezactivezi javascript-ul și vezi dacă javascript modifică div-ul.

Unde ar trebui să afișez această valoare? Undeva în interiorul buclei? Dacă afișez acea valoare înainte de endwhile obțin: Valoarea lui $i: 0 Valoarea lui $i: 1 Valoarea lui $i: 2
Slideshow-ul funcționează conform așteptărilor dacă înlocuiesc partea de buclă WordPress cu simple elemente HTML statice. Asta mă face să cred că este totuși o problemă legată de buclă.

$i
incrementare ok. Am schimbat codul. Am folosit get_posts()
acum. Verifică dacă avem noroc de data asta :) Și dacă nu funcționează, vino pe chat-ul "Stoppress" http://chat.stackexchange.com/rooms/6/stoppress

Se pare că nu pot scrie nimic în chat. Am nevoie de 20 de puncte de reputație. Într-o bună zi! :D Există vreo altă modalitate prin care să-ți pot trimite mesaje pe acest site? Nu găsesc nicio altă opțiune.

hai să continuăm această discuție în chat

Problema cu codul pare a fi că în loc să pună 4 elemente într-un slide, apoi să creeze un slide nou etc... codul face ca fiecare al patrulea element să ajungă într-un slide.

Codul tău actual, cu câteva mici ajustări, mi-a dat exact ceea ce doream. Mulțumesc!

Aproape corect. Singura problemă era că de fapt nu doriți să afișați atât începutul cât și sfârșitul pe același index. Următorul cod funcționează pentru mine într-o situație similară. Singura modificare reală este că $i începe de la 1 și afișează tag-urile de deschidere și închidere pentru slide-uri pe numărări diferite.
De asemenea, mi-am luat libertatea de a curăța puțin codul.
<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> <!-- sfârșit .fastighet-slider-entry -->
<?php
if( $i % 4 == 0 ) :
?>
</div>
<?php
endif;
++$i;
endwhile;
wp_reset_query();
?>
</div> <!-- sfârșit .slides_container -->
<a href="#" class="prev">anterioară</a>
<a href="#" class="next">următoarea</a>
</div> <!-- sfârșit .slides -->
