Cum să modific bucla pentru a se potrivi cu slider-ul meu jQuery (slide-uri)

7 mar. 2012, 10:30:12
Vizualizări: 2.15K
Voturi: 2

Î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!

1
Comentarii

Deoarece deja știi cum să interoghezi articolele tale și cum să returnezi imaginea reprezentativă din acele articole, ce rămâne este de fapt o întrebare despre PHP, mai degrabă decât una despre WordPress.

Chip Bennett Chip Bennett
7 mar. 2012 14:38:52
Toate răspunsurile la întrebare 2
17

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!

7 mar. 2012 10:45:39
Comentarii

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.

Johan Dahl Johan Dahl
7 mar. 2012 11:07:51

@JohanDahl: era o eroare în codul meu. Am reparat-o. Încearcă acum.

Sisir Sisir
7 mar. 2012 11:15:28

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

Johan Dahl Johan Dahl
7 mar. 2012 11:20:18

@JohanDahl Ce anume acum?

kaiser kaiser
7 mar. 2012 11:22:39

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

http://pastebin.com/WbERsyUH

Johan Dahl Johan Dahl
7 mar. 2012 11:33:01

î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 Sisir
7 mar. 2012 11:36:52

@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

Johan Dahl Johan Dahl
7 mar. 2012 11:58:22

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.

Sisir Sisir
7 mar. 2012 12:12:19

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ă.

Johan Dahl Johan Dahl
7 mar. 2012 12:23:35

$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

Sisir Sisir
7 mar. 2012 12:44:09

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.

Johan Dahl Johan Dahl
7 mar. 2012 13:01:08

acum poți! ;)

Sisir Sisir
7 mar. 2012 13:07:00

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

Sisir Sisir
7 mar. 2012 13:08:47

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.

Johan Dahl Johan Dahl
8 mar. 2012 13:22:20

@johanDahl: te rog încearcă acum.

Sisir Sisir
8 mar. 2012 20:29:33

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

Johan Dahl Johan Dahl
14 mar. 2012 14:56:48

ma bucur că a funcționat!

Sisir Sisir
14 mar. 2012 18:21:08
Arată celelalte 12 comentarii
0

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 -->
7 mar. 2012 16:07:09