Inserimento <div> ogni 2 articoli in un loop Wordpress

PazzoFrontEnd

Utente Attivo
8 Ott 2013
46
0
6
Buongiorno a tutti
da poco mi sono affacciato a wordpress e php e vorrei una spiegazione su come fare una cosa: ho bisogno di inserire un <div class="clear"></div> per impaginare al meglio i miei articoli all'interno del loop wordpress. La sintassi di quello che voglio realizzare è la seguente:

HTML:
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
ecc...per quanti sono gli articoli impaginati ma sempre ogni due. Come posso fare ad inserire tale logica all'interno di un loop (mi viene in mente un foreach ma non capisco come inserirlo) ?

PHP:
        <?php 
            if ( have_posts() ) {

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

                  <?php //qui l'html da mostrare ?>
                    
            <?php    endwhile;

            } else {
                //no content
            }

        ?>
Grazie anticipatamente e buona giornata
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi inizializzare un contatore prima del ciclo , lo incrementi all'interno, verifichi se divizibile per 2 e nel caso aggiungi il div
PHP:
if ($i % 2 == 0)
            echo "<div class='clear'></div>";
        $i++;
 
Ultima modifica:

PazzoFrontEnd

Utente Attivo
8 Ott 2013
46
0
6
Ciao Criric

Ho provato ma il div me lo inserisce prima e non dopo:

PHP:
        <?php 
            if ( have_posts() ) {


                while (have_posts()) : the_post(); 

                    if ($i % 2 == 0)
                        echo "<div class='clear'></div>";
                    $i++; 
                                           
                    get_template_part("content", "article" );


                endwhile;

            } else {
                //no content
            }

        ?>
Dentro "get_template_part("content", "article" );" inserisco il "the_content()". La situazione che si crea è la seguente:

Codice:
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
Li vorrei prima. Se invece sposto il controllo dopo il ciclo ho una situazione del genere:

Codice:
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article>
Come posso affinare la cosa?
Grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Invertili
PHP:
get_template_part("content", "article" );
if ($i % 2 == 0)
        echo "<div class='clear'></div>";
  $i++;
ps:
non hai inizializzato la variabile prima del ciclo prova con $i = 0 o $i = 1
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Nel frattempo ho fatto questa prova
PHP:
<style>
    .article {
        width: 200px;
        height: 100px;
        border: 1px solid black;
        margin-right: 1px;
        float:left;
    }
    .clear {
        clear:both;
    }
</style>
<?php
$i = 0;
while ($i < 10) {
    echo "<div class='article'></div>";
    $i++;
    if ($i % 2 == 0)
        echo "<div class='clear'></div>";
}
sembra funzionare
 

PazzoFrontEnd

Utente Attivo
8 Ott 2013
46
0
6
Ho fatto così:

PHP:
            $custom_query = new WP_Query("category_name=homepage");

            $i = 0;
           
            if ( $custom_query->have_posts() ) {


                while ($custom_query->have_posts()) : $custom_query->the_post(); 
                                           
                    get_template_part("content", "article" );


                    if ($i % 2 == 0)
                        echo "<div class='clear'></div>";
                    $i++; 

                endwhile;

            } else {
                //no content
            }
Ma mi restituisce questo:

Codice:
<article></article>
<div class="clear"></div>
<article></article>
<article></article>
<div class="clear"></div>
<article></article
Non va...dove sbaglio? So già che sarà una fesseria abominevole....
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Incrementa prima di verificare
PHP:
 $i = 0;
    while ($custom_query->have_posts()) : $custom_query->the_post();

        get_template_part("content", "article");

        $i++;
        if ($i % 2 == 0)
            echo "<div class='clear'></div>";
    endwhile;