web-dev-qa-db-fra.com

Comment est-ce que je dénomme les deux premiers poteaux d'une boucle

J'essaye d'appeler une seule boucle pour ressembler à

---------------------------------------------
||            |             ||              ||
||            |             ||--------------||
||            |             ||              ||
||            |             ||--------------||
||            |             ||              ||
||            |             ||--------------|| 
||            |             ||              ||
----------------------------------------------

Donc, ce que j'essaie de réaliser ici, c'est que 5 messages soient retirés de la boucle. Les deux premiers sont positionnés à gauche et sont plus grands. Les 3 suivants sont sur la droite et sont beaucoup plus petits.

J'essaie d'utiliser deux get_template_part afin de réaliser cela en utilisant Twitter Bootstrap.

C'est ce que j'ai essayé jusqu'à présent

<div class="col-lg-12">
    <div class="row">
        <div class="col-lg-7">
            <div class="row">
            <?php if ( have_posts() ) : ?>
            <?php if ( in_category( 'Featured' ) ) : ?>
                <?php /* Start the Featured Loop */ ?>
                <?php $count=0; ?>
                <?php while ( have_posts() ) : the_post(); ?>

                    <?php $count++; ?>

                    <?php if($count <= 1):?>
                    <?php get_template_part( 'content', 'featured' ); ?>

            </div>      
        </div>
        <div class="col-lg-5">
            <div class="row">
                <?php else: ?>

                <?php if($count >= 3)?>
                        <?php get_template_part( 'content', 'featuredside' ); ?>
                        <?php endif; ?>
                <?php endwhile; ?>
                    <?php endif; ?>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>

Et cela fonctionne lorsque je règle la ligne <?php if($count <= 1):?> sur 1 mais que je la modifie en deux pour essayer de créer la mise en page que je suis après, le second message passe au <div class="col-lg-5"> et gâche toute la mise en page.

Quelqu'un peut-il coudre mon chapeau?

1
Michael N

au lieu d'une variable de compteur, vous pouvez utiliser le compteur de boucles intégrées;

comme je ne sais pas comment vous devez insérer les articles dans les divs individuels, voici juste un exemple de structure (à utiliser uniquement avec 5 articles par page):

<div class="col-lg-12">
    <div class="row">

            <?php if ( have_posts() ) : ?>
            <?php if ( in_category( 'Featured' ) ) : /* Start the Featured Loop */ ?>

                <?php while( have_posts() ) : the_post(); ?>

                <?php if( $wp_query->current_post == 0 ) { 
                //open wide column wrapper div// ?>
                <?php } ?>

                <?php if( $wp_query->current_post <= 1 ) { 
                get_template_part( 'content', 'featured' );
                //insert large post// ?>
                <?php } ?>

                <?php if( $wp_query->current_post == 1 || $wp_query->current_post <= 1 && $wp_query->current_post == $wp_query->post_count-1 ) { 
                //close wide column div// ?>
                <?php } ?>

                <?php if( $wp_query->current_post == 2 || $wp_query->current_post <= 1 && $wp_query->current_post == $wp_query->post_count-1 ) { 
                //open narrow column wrapper div// ?>
                <?php } ?>

                <?php if( $wp_query->current_post >= 2 ) { 
                get_template_part( 'content', 'featuredside' );
                //insert small post//?>
                <?php } ?>

                <?php if( $wp_query->current_post == 4 || $wp_query->current_post == $wp_query->post_count-1 ) { 
                //close narrow column div// ?>
                <?php } ?>

                <?php endwhile; ?>

                    <?php endif; ?>

                <?php endif; ?>

    </div> <!--/.row-->
</div> <!--/.col-lg-12-->

cela s'occupe de fermer les div même s'il y a moins de cinq posts sur la page, et crée également une seconde colonne vide s'il n'y a que deux posts ou moins.

mise en garde: l'utilisation de in_category() à cet emplacement peut vous donner des résultats inattendus; essayez d'utiliser une méthode différente pour rendre la boucle spécifique aux publications "en vedette".

sur quel fichier modèle travaillez-vous?

1
Michael

Ce que je ferais, c’est d’utiliser plusieurs boucles tout en suivant l’ID de la publication enregistrée dans la publication précédente et en la sautant dans la boucle suivante afin qu’elle ne soit pas répétée. Je vais vous montrer ce que je veux dire. Je me sers également de la classe WP_Query .

<div class="container">

        <div class="row">

            <?php

                $args = array(
                    'posts_per_page' => 1
                    );

                $query = new WP_Query($args);

                if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

                        <?php $do_not_duplicate = $post->ID; ?>

                        <div class="col-md-4">

                            <?php the_title(); ?>
                            <?php the_excerpt(); ?>


                        </div><!--col-md-4-->

                    <?php endwhile;

                else :

                    echo '<p>No posts found</p>';

                endif; ?>

                <?php wp_reset_postdata();

                $args = array(
                    'posts_per_page' => '1'
                    );

                $query = new WP_Query($args);

                ?>

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

                      //storing the post ID in a new variable
                       <?php $do_not_duplicate_again = $post->ID; ?>

                        //This is where we check if the post from the first loop is being repeated and skip an iteration of the loop if it is.
                        if ( $post->ID == $do_not_duplicate ) continue; 


                    <div class="col-md-4">

                        <?php the_title(); ?>
                        <?php the_excerpt(); ?>

                    </div><!--col-md-4--> 

                <?php endwhile;

                else :

                    echo '<p>No posts found</p>';

                endif; ?>

    <?php wp_reset_postdata();

                $args = array(
                    'posts_per_page' => '3'
                    );

                $query = new WP_Query($args);

                ?>

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



                        if ( $post->ID == $do_not_duplicate_again ) continue; 


                    <div class="col-md-4">

                        <?php the_title(); ?>
                        <?php the_excerpt(); ?>

                    </div><!--col-md-4--> 

                <?php endwhile;

                else :

                    echo '<p>No posts found</p>';

                endif; ?>

        </div><!--row-->

</div><!--container-->
0
chap