2012-01-19 7 views
-1

私はワードプレスのループ内にスライドショーを設定しようとしています。そのためには、スライドコンテンツの1つのセクションと、ナビゲーションを行う1つのセクションが必要です。ここでphp whileループの中に要素を一度作成する

は私のコードです:

<div id="upcoming_shows"> 
     <?php if ($shows->have_posts()) : ?> 
      <?php /* Start the Loop */ ?>    
      <?php while ($shows->have_posts()) : $shows->the_post(); ?> 
       <?php //get rid of auto drafts and trash posts 
        $p_status = get_post_status($post); 
        if ($p_status != 'trash' and $p_status != 'auto-draft') : 
       ?> 
<!--I WANT A containing DIV HERE created only once--> 
       <div id="slides"> 
        <div class="slide" id="slide-<?php echo $post->ID; ?>"> 
         <?php the_post_thumbnail(); ?> 
         <p class="show_date"><?php echo get_field('show_date'); ?></p> 
         <h1 class="band_names"><a href="<?php the_permalink(); ?>" alt="link to blog post page"><?php the_title(); ?></a></h1> 
        </div><!--end Slide--> 
<!--AND IT WILL END HERE--> 
       </div><!-- end SLIDES CONTAINING DIV--> 
<!--THEN ANOTHER DIV HERE CONTAINING THE SLIDES_NAV--> 
<div id="slides_nav"> <!--CREATE THIS ONLY ONCE as a wrapper--> 
<p class="band_names"><a href=#slide-"<?php $post->ID; ?>"><?php the_title(); ?></a></p> 
</div><!--end slides nav CONTAINER--> 
       <?php endif; ?><!--end Auto Draft check--> 
      <?php endwhile; ?>   
      <?php endif; ?><!--end if haveposts--> 


     </div><!--end upcoming_shows--> 

私がやりたい何か「スライド」と呼ばれるdivの中に「スライド」のクラスを持つ要素をラップし、その後に包まれた要素の別のセットを作成しています「slides_nav」と呼ばれるdiv。

私が言って道を把握することはできません。

スライド 『要素『すべての周りの』スライド「これは、ループの最初の繰り返しである場合は、と呼ばれるのdivを作成する』

を。 "これがループの最初の反復である場合は、" slide_nav "というdivを作成してスライドのナビゲーション要素を囲みます(これはループ内にも作成されます($ showsのタイトルとページの内部slide_nav hrefに一致するIDを持つスライドにリンクしてください)

私は試しました:

<?php $i=0; 
    if ($i == 0) { 
     echo '<div id="slides">'; 
     $i++; 
    }; 

divを正しく作成しましたが、スライドごとに作成しました(divを閉じる条件も追加しました)。

私はPHP初心者です。

ループ内で何かを作成するためにいくつかの答えを見て、少し試しましたが、プログラミング知識がないと単純な解決策が見つからないと思います。

ありがとうございました

+0

divが各スライドに対して作成された理由は、まだwhileループ内にあるからです。各スライドごとに再実行されます。 –

答えて

2

なぜループの前に作成しないのですか?この時につまずくかもしれないPHPに新しい、他の人のために

<?php 
    echo '<div class="slides">'; 
    while(// the loop){ 
     // your instructions 
    } 
+0

セクション全体のdivを含むようにしました。そのセクション(とループ)の中に、すべてのスライドをラップする1つのdivと、slide_navをラップする1つのdivが必要です。私は明確にするために私の質問を更新します。 – Squadrons

+0

@Squadronsだから、最初の 'if'ループと' while'ループの間に入れてください。 – jeroen

+0

もっと明確にするために私の例にいくつかのコードを追加しました。ループ内では、ループの繰り返しごとにではなく、2つのdivを1つだけ作成する必要があります。これはループ内で発生する必要があり、ループ内からこれらのdivのそれぞれの内容の中の要素を呼び出すことができます。 – Squadrons

0

、ここで私は最良の答えであることが判明するものです。

ループ外にdivを作成することは、他の解決策よりはるかに簡単です。条件付きで、スライドdivをループ内に表示し、各スライドdivを含むようにすることもできますが、そうするロジックはそのループで一度しか動作しません。

私はそれを拡張し、条件付きで作成された2つのdivを持っていたら、もっと複雑になり、私が必要とした他の情報のための追加ループを作成する方が簡単だったことに気づきました。

私がこの質問をした理由は、同じDBクエリーから同じ情報を得るために2つのループを作成することが悪い習慣であると想定したためです。

2つの別々のループを作成するのが良い方法であるかどうかは分かりませんが、私はプログラムするほうがはるかに簡単だと分かります。

良い(または必要な)マークアップを作成するプロセスを単純化するために、それが良いか悪い習慣(同じ情報に重複したクエリとループを実行するか)を誰かが教えてもらえれば、

ありがとうございました。

関連する問題