web-dev-qa-db-ja.com

私のjQueryスライダーに合うようにこのループを修正したい(スライド)

私は、特定のカスタム投稿タイプからサムネイルを取得し、それぞれの「スライド」にそれらを表示するスライダーを作成しようとしています。スライダーとサムネイルを本来のように動作させることができますが、ループを変更してコンテナー内の4つの投稿を表示し、次の4つの投稿を繰り返すようにする方法がわからないのです。

私のループはこのように見えます:

<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> <!-- end .slides_container -->

    <a href="#" class="prev">prev</a>
    <a href="#" class="next">next</a>

</div> <!-- end .slides -->

スライドのクラスを持つすべてのdivは、ご覧のとおりスライドになります。しかし、どのように私はそれが各そのようなスライドに4本のポストを入れて、それから別のスライドに4本以上のポストを入れるようにすることができますか。

任意の助けやヒントは本当に感謝されるでしょう!

2
Johan Dahl

非常に単純な数学を試みました。 <div class="slide">は4投稿ごとに印刷されます。だから、もし古い学校のロジック$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> <!--end .slide--><?php endif; ?> 

                        <?php $i++; endforeach; ?>

                </div> <!-- end .slides_container -->

どうなるか教えてください。ありがとうございます。

2
Sisir

ほぼ正しいです。唯一の問題は、開始と終了の両方を同じインデックスに印刷したくないということです。次のコードは私に似たような状況で機能します。唯一の本当の変更は、$ iが1から始まり、スライドの開始タグと終了タグが異なる数で表示されることです。

また、コードを少しクリーンアップする自由も取りました。

<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> <!-- end .fastighet-slider-entry -->
            <?php 
            if( $i % 4 == 0 ) : 
                ?>
                </div>
                <?php 
            endif; 
            ++$i; 
        endwhile; 
        wp_reset_query(); 
        ?>

    </div> <!-- end .slides_container -->

    <a href="#" class="prev">prev</a>
    <a href="#" class="next">next</a>

</div> <!-- end .slides -->
0
Kokarn