¿Cómo obtener un HTML diferente para entradas pares/impares?

6 sept 2013, 16:31:25
Vistas: 22.5K
Votos: 6
    consultar entradas
      si existen entradas
        entonces comenzar el bucle
          si la entrada es par: <h1>título</h1><p>contenido</p>
          si la entrada es impar: <div>su imagen</div>

Esto es lo que estoy tratando de conseguir, una salida diferente para entradas pares/impares: para entradas pares mostraremos el título y el contenido mientras que para entradas impares mostraremos su imagen (la miniatura, por ejemplo). ¿Cómo conseguir este resultado?

Consulto las entradas de esta manera

query_posts('category_name=category-name');

luego no sé cómo continuar

3
Comentarios

Publica todo tu código por favor. Y no uses query_posts para nada. Esta pregunta ha sido respondida múltiples veces, por cierto. Haz alguna investigación y edita la pregunta con algo más específico.

s_ha_dum s_ha_dum
6 sept 2013 16:42:07

@s_ha_dum lo siento, no tengo código. Si tuviera el código no estaría aquí.

marco marco
6 sept 2013 16:47:33

Ok. Te di un lugar por donde empezar. Esta pregunta ha sido hecha y respondida muchas veces en muchas variaciones. Y segundo, ¿no tienes nada de código de loop? El formato de pregunta para este sitio es "¿Cómo puedo arreglar este código roto?" no "¿Podrías por favor escribir mi código por mí?"

s_ha_dum s_ha_dum
6 sept 2013 16:57:32
Todas las respuestas a la pregunta 3
0
14

No necesitas una nueva variable para contar las publicaciones, WordPress ya tiene una en $wp_query->current_post.

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

Si usas una instancia personalizada de WP_Query como sugirió iEmanuele, entonces será $query->current_post en su lugar.

14 feb 2014 18:13:33
0

Por favor no uses query_posts();, en su lugar usa la clase WP_Query o get_posts();.

Para seleccionar posts pares/impares en tu loop:

//Usaré una instancia de la clase WP_Query
$args( 'post_type' => 'recipe', 'posts_per_page' => 5 );

//Configurar un contador
$counter = 0;

//Preparando el Loop
$query = new WP_Query( $args );

//En el while loop el contador incrementa en uno $counter++
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); $counter++;

    //Estamos en el loop así que podemos verificar si el contador es par o impar
    if( $counter % 2 == 0 ) : //Es par

        the_title(); //Muestra el título del post
        the_content(); //Muestra el contenido del post

    else: //Es impar

        if( has_post_thumbnail() ) : //Si el post tiene imagen destacada, muéstrala
            the_post_thumbnail();
        endif;

    endif;

endwhile; wp_reset_postdata(); endif;

¡Espero que te ayude!

6 sept 2013 17:02:06
0

Puedes tener una nueva variable para contar el número de posts, luego incrementarla dentro del while loop y luego verificar si es impar o par. Aquí hay un código de ejemplo del archivo loop.php del tema Blaskan que muestra los archivos de un autor...

<?php // Iniciar el loop ?>
<?php while ( have_posts() ) : the_post(); ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archivos ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Enlace 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: // Sino ?>

Código modificado que muestra la fecha de publicación solo en los posts con número par en los archivos de un autor...

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

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archivos ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Enlace 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: // Sino ?>
6 sept 2013 16:59:35