模板的循环内循环(再次)

时间:2015-02-10 作者:skytorner

我知道这个问题已经问过了,但我找到的所有答案都帮不了我。。

我制作了一个HTML页面,我想将其集成到Wordpress中。

在我进入帖子部分之前,主题的整合是正确的

我对显示帖子的算法有问题,所以我知道它来自Wordpress循环。

我已经在Wordpress循环上进行了多次搜索,但我不了解不同的用途。

下面是我想循环的HTML代码库:

<div class="oeuvres">
   <div class="line0"><!-- should be dynamic -->
    <div class="oeuvre">
        <img class="img-oeuvre" src="ressources/creations/lisemassages.png" alt="">
        <div class="infos-oeuvre">
           <p>Title</p>
           <p>Content</p>
           <a class="btn-oeuvre" href="" target="_blank">Voir le site</a>
        </div>
    </div>
    <div class="oeuvre">
        <img class="img-oeuvre" src="ressources/creations/centredesoi.png" alt="">
        <div class="infos-oeuvre">
            <p>Title</p>
            <p>Content</p>
            <a class="btn-oeuvre" href="" target="_blank">voir le site</a>
        </div>
    </div>
  </div><!--class line0 -->
</div>

<div class="oeuvres">
   <div class="line1"><!--Should be dynamic-->
    <div class="oeuvre">
        <div class="infos-oeuvre">
                <p>title</p>
                <p>Content</p>
                <a class="btn-oeuvre" href="" target="_blank">Voir le site</a>
        </div>
        <img class="img-oeuvre" src="ressources/creations/comparepc.png" alt="">
    </div>

    <div class="oeuvre">
        <div class="infos-oeuvre">
            <p>Title</p>
            <p>Content</p>
            <a class="btn-oeuvre" href="" target="_blank">voir nos créations</a>
        </div>
        <img class="img-oeuvre" src="ressources/creations/wine&amp;sound.jpg" alt="">
    </div>
   </div><!--class line1 -->
</div>
以下是我已经完成的代码,但我遇到了一些问题:只有3篇文章重复:

<?php   
     //Variables needed for the template
     $req = new WP_Query(\'category_name=creations\') ;    //object with the posts
     $cptPosts = $req->post_count ; //nomber of post
     $cptOeuvres = $cptPosts/2 ; //number of div .Oeuvres needed
     $iOeuvres = 1 ; //counter of div.oeuvres
     $iPost = 1 ; //counter of posts
    ?>

    <?php echo \'cptpost = \'.$cptPosts ; echo \'cptoeuvres = \'.$cptOeuvres ;// to check $cptPost/$cptoeuvres value ?>

    <?php if ($req->have_posts()) : ?>

        <?php while($iOeuvres <= $cptOeuvres): ?>
            <?php //if $iOeuvres is pair use .line1 else .line2 ?>               
            <?php if($iOeuvres%2 == 0) : ?>

                 <div class = "oeuvres">
                   <div class ="line1">

            <?php else : ?>

                 <div class = "oeuvres">            
                    <div class ="line0">

            <?php endif ;?>


            <?php while($req->have_posts()) : $req->the_post() ; ?>

                <?php //show only 2 posts per line?>                          
                <?php if($iPost<=2):?>

                     <?php //if iOeuvres is pair, image goes before ?>
                     <?php if($iOeuvres%2 == 0) : ?>   

                         <div class="oeuvre">
                            <img class="img-oeuvre" src="<?php bloginfo(\'stylesheet_directory\');?>/ressources/creations/lisemassages.png" alt="">
                            <div class="infos-oeuvre">
                                <p><?php the_title() ; ?></p>
                                <p><?php the_content() ; ?></p>                                
                                <a class="btn-oeuvre" href="http://lisemassages.fr" target="_blank">Voir le site</a>

                            </div><!--fermeture div.infos oeuvre-->
                          </div><!--fermeture div .oeuvre-->

                     <?php else : ?>

                           <div class="oeuvre">                                                
                              <div class="infos-oeuvre">
                                   <p><?php the_title() ; ?></p>
                                   <p><?php the_content() ; ?></p>
                                    <a class="btn-oeuvre" href="http://lisemassages.fr" target="_blank">Voir le site</a>
                               </div><!--fermeture div.infos oeuvre-->
                               <img class="img-oeuvre" src="<?php bloginfo(\'stylesheet_directory\');?>/ressources/creations/lisemassages.png" alt="">
                           </div><!--fermeture div .oeuvre--> 

                      <?php endif ; ?>

                      <?php $iPost++ ;?>

                  <?php else : ?>

                        <!-- $iPost > 2 : close the bracket -->
                        <!--of div.line and div oeuvreS -> add 1 div .oeuvreS -->          
                        </div><!--fermeture div .line0/1-->
                      </div><!--fermeture div .oeuvreS-->

                   <?php $iPost=1; endif ;?>

               <?php endwhile; ?>

               <?php $iOeuvres++ ; ?>                

          <?php endwhile ;  ?>

       <?php else : ?>
            <!-- no post-->
            <h1>Rien du tout</h1>
       <?php endif ;?>
我不知道我的代码是否可以理解。。。我的英语也。。。

但我的主要问题是,当这些值位于另一个循环中时,如何将其保持在内部循环中。(在我心目中,最好的例子就像酒店的计票室:一楼:你从1,2…5开始,二楼,你从6,7,8…继续)

任何帮助都会很好!

2 个回复
SO网友:guidod

[编辑]

如果我理解正确的话,你所说的“外环”只是为了构建一个两列的布局。如果是这样的话,您不需要调用两个WordPress循环,只需在开始时打开一个“假”作品,在结束时关闭一个“假”作品,执行一个循环(一个while have\\u posts()),然后每2篇文章关闭并重新打开一个Ouvres DIV(当$iOeuvres%2==0时)。

让我知道这是否有意义。

[原始答案]

First problem: 如果执行两个循环,则应该为WP\\u查询对象使用不同的名称(例如,$req1和$req2,而不是两个$req)。否则,内部值将覆盖外部值。

Second problem: 外部查询中缺少$req->the\\u post()。这意味着岗位永远不会进步。

但您真的需要WP循环中的WP循环吗?我没有看到任何关于内部查询的帖子请求,您只在第3行对WP\\u query()进行了一次调用。也许,如果你澄清你想获取什么(哪些帖子类型,它们是如何嵌套的,等等),我可以提供更多帮助。

SO网友:skytorner

下面是生成正确html的代码。也许代码需要一些改进。

   <?php

      reqCrea = new WP_Query(\'category_name=creations\'); //objet contenant les posts de la categorie creations
      $cptPosts = $reqCrea->post_count; //nombre de post

                ?>
                <?php
                //echo \'cptpost = \' . $cptPosts;                    
                if ($reqCrea->have_posts()) :
                    $i = 0;
                    $ligne = 0;
                    $sortie = false;
                    while ($reqCrea->have_posts()) :

                        $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'thumbnail\' );
                        $url = $thumb[\'0\'];
                        echo \'<div class="oeuvres">\' ; 
                        // Sortie en cas de nb pairs de post
                        if ($i >= $cptPosts - 1 && ($cptPosts % 2 == 0))
                            break;

                        // Post de début de ligne
                        the_post();

                        $ligne = $ligne % 2;
                        ?>
                        <div class="line<?php echo $ligne; ?>">
                            <?php
                            do {
                                // Impair -> 2eme post sur une meme ligne
                                if (($i % 2) != 0) {
                                    the_post();
                                }
                                ?> 
                                <div class="oeuvre">
                                    <?php if ($ligne == 0): ?> 
                                        <img class="img-oeuvre" src="<?php echo $url ; ?>" alt="">
                                    <?php endif; ?> 
                                    <div class="infos-oeuvre">
                                        <p><?php the_title(); ?></p>
                                        <p><?php the_content(); ?></p>
                                        <a class="btn-oeuvre" href="http://lisemassages.fr" target="_blank">Voir le site</a>
                                    </div>
                                    <?php if ($ligne != 0): ?> 
                                        <img class="img-oeuvre" src="<?php echo $url ; ?>" alt="">
                                    <?php endif; ?> 
                                </div>

                                <?php
                                // Sortie en cas de nb impairs de post
                                if ($i >= $cptPosts - 1 && ($cptPosts % 2 != 0)) {
                                    $sortie = true;
                                    break;
                                }

                                if (($i % 2) == 0) {
                                    $i++;
                                } else {
                                    $i++;
                                    break;
                                }
                            } while ($reqCrea->have_posts());
                            if ($sortie)
                                break;

                            $ligne++;
                            ?>
                        </div>
                        <?php
                    endwhile;
                else :
                    ?>
                </div>
                <h1>Rien du tout</h1>
            <?php endif; ?>

结束

相关推荐

CPT while loop not working

我无法从while循环中获得任何东西:<ul> <?php $query_args = array( \'post_type\' => \'Smart panels\', \'posts_per_page\' => 5, \'orderby\' => \'meta_value_num\', \'meta_key\' => \'post_v