Modifica questo loop per adattarlo al mio slider jQuery (slides)

7 mar 2012, 10:30:12
Visualizzazioni: 2.15K
Voti: 2

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!

1
Commenti

Dato che sai già come interrogare i tuoi post e come restituire l'immagine in evidenza da quei post, ciò che rimane è davvero una domanda di PHP, piuttosto che una domanda di WordPress.

Chip Bennett Chip Bennett
7 mar 2012 14:38:52
Tutte le risposte alla domanda 2
17

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!

7 mar 2012 10:45:39
Commenti

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.

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

@JohanDahl: c'era un errore nel mio codice. L'ho sistemato. Prova ora.

Sisir Sisir
7 mar 2012 11:15:28

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

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

@JohanDahl Tipo cosa adesso?

kaiser kaiser
7 mar 2012 11:22:39

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

http://pastebin.com/WbERsyUH

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

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

Sisir Sisir
7 mar 2012 11:36:52

@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

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

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.

Sisir Sisir
7 mar 2012 12:12:19

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.

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

$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

Sisir Sisir
7 mar 2012 12:44:09

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.

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

ora puoi! ;)

Sisir Sisir
7 mar 2012 13:07:00

continuiamo questa discussione nella chat

Sisir Sisir
7 mar 2012 13:08:47

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.

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

@johanDahl: per favore prova ora.

Sisir Sisir
8 mar 2012 20:29:33

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

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

felice che abbia funzionato!

Sisir Sisir
14 mar 2012 18:21:08
Mostra i restanti 12 commenti
0

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