come ottenere un html diverso per i post pari/dispari?

6 set 2013, 16:31:25
Visualizzazioni: 22.5K
Voti: 6
    query posts
      se esistono i post
        inizia il loop
          se il post è pari: <h1>titolo</h1><p>contenuto</p>
          se il post è dispari: <div>la sua immagine</div>

questo è quello che sto cercando di ottenere, un output diverso per i post pari/dispari: per i post pari mostreremo il titolo e il contenuto mentre per i post dispari mostreremo la sua immagine (la thumbnail, per esempio). Come posso ottenere questo risultato?

Faccio la query dei post in questo modo

query_posts('category_name=category-name');

poi non so come continuare

3
Commenti

Per favore, pubblica tutto il tuo codice. E non usare assolutamente query_posts. A proposito, questa domanda è stata risposta più volte. Fai qualche ricerca e modifica la domanda con qualcosa di più specifico.

s_ha_dum s_ha_dum
6 set 2013 16:42:07

@s_ha_dum scusa, non ho il codice. Se avessi il codice non sarei qui.

marco marco
6 set 2013 16:47:33

Ok. Ti ho dato un punto da cui iniziare. Questa domanda è stata posta e risposta molte volte in molte varianti. E in secondo luogo, non hai proprio nessun codice del loop? Il formato della domanda per questo sito è "Come posso sistemare questo codice rotto?" non "Puoi gentilmente scrivere il codice per me?".

s_ha_dum s_ha_dum
6 set 2013 16:57:32
Tutte le risposte alla domanda 3
0
14

Non hai bisogno di una nuova variabile per contare i post, WordPress ne ha già una in $wp_query->current_post.

<?php while (have_posts()): the_post() ?>
    <?php if ($wp_query->current_post % 2 == 0): ?>
        pari
    <?php else: ?>
        dispari
    <?php endif ?>
<?php endwhile ?>

Se usi un'istanza personalizzata di WP_Query come suggerito da iEmanuele, allora sarà $query->current_post invece.

14 feb 2014 18:13:33
0

Per favore non usare query_posts();, utilizza invece la classe WP_Query o get_posts();.

Per individuare i post pari/dispari nel tuo loop:

//Userò un'istanza della classe WP_Query
$args( 'post_type' => 'recipe', 'posts_per_page' => 5 );

//Imposto un contatore
$counter = 0;

//Preparo il Loop
$query = new WP_Query( $args );

//Nel while loop il contatore incrementa di uno $counter++
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); $counter++;

    //Siamo nel loop quindi possiamo verificare se il contatore è pari o dispari
    if( $counter % 2 == 0 ) : //È pari

        the_title(); //Mostra il titolo del post
        the_content(); //Mostra il contenuto del post

    else: //È dispari

        if( has_post_thumbnail() ) : //Se il post ha l'immagine in evidenza, mostrala
            the_post_thumbnail();
        endif;

    endif;

endwhile; wp_reset_postdata(); endif;

Spero sia utile!

6 set 2013 17:02:06
0

Puoi utilizzare una nuova variabile per contare il numero di post, incrementarla all'interno del while loop e poi verificare se è dispari o pari. Ecco un esempio di codice tratto dal file loop.php del tema Blaskan che mostra gli archivi di un autore...

<?php // Inizia il loop ?>
<?php while ( have_posts() ) : the_post(); ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archivi ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Link permanente a %s', 'blaskan' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_title(); ?></a>
      <time datetime="<?php the_date('c'); ?>"><?php print get_the_date(); ?></time>
    </li>
<?php else: // Altrimenti ?>

Codice modificato che mostra la data di pubblicazione solo sui post con numero pari negli archivi di un autore...

<?php $posts_count = 1; // Inizia il loop ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php ++$posts_count; ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archivi ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Link permanente a %s', 'blaskan' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_title(); ?></a>
      <?php if($posts_count % 2): ?> <time datetime="<?php the_date('c'); ?>"><?php print get_the_date(); ?></time> <?php endif; ?>
    </li>
<?php else: // Altrimenti ?>
6 set 2013 16:59:35