web-dev-qa-db-fra.com

comment obtenir un code HTML différent pour les messages pairs/impairs?

    query posts
      if posts exist
        then begin the loop
          if post is even: <h1>title</h1><p>content</p>
          if post is odd: <div>its image</div>

c’est ce que j’essaie d’obtenir: une sortie différente pour les publications impaires/paires: pour les publications paires, nous montrerons le titre et le contenu, tandis que pour les publications impaires, nous montrerons son image (la vignette, par exemple). Comment obtenir ce résultat?

J'interroge post de cette façon

query_posts('category_name=category-name');

alors je ne sais pas comment continuer

4
marco

Vous n'avez pas besoin d'une nouvelle variable pour compter les articles, WordPress en a déjà une dans $wp_query->current_post.

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

Si vous utilisez une instance personnalisée de WP_Query comme suggéré par iEmanuele, il s'agira plutôt de $query->current_post.

8
Dave James Miller

S'il vous plaît ne pas utiliser query_posts (); , utilisez WP_Query class ou get_posts(); à la place.

Pour cibler les publications impaires/paires dans votre boucle:

//I will use WP_Query class instance
$args( 'post_type' => 'recipe', 'posts_per_page' => 5 );

//Set up a counter
$counter = 0;

//Preparing the Loop
$query = new WP_Query( $args );

//In while loop counter increments by one $counter++
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); $counter++;

    //We are in loop so we can check if counter is odd or even
    if( $counter % 2 == 0 ) : //It's even

        the_title(); //Echo the title of post
        the_content(); //Echo the content of the post

    else: //It's odd

        if( has_post_thumbnail() ) : //If the post has the post thumbnail, show it
            the_post_thumbnail();
        endif;

    endif;

endwhile; wp_reset_postdata(); endif;

J'espère que ça aide!

4
iEmanuele

Vous pouvez avoir une nouvelle variable pour compter le nombre de publications, puis l'augmenter à l'intérieur de la boucle while , puis vérifier si elle est impaire ou paire. Voici un exemple de code du fichier loop.php de thème Blaskan } qui affiche les archives d'un auteur ...

<?php // Start the loop ?>
<?php while ( have_posts() ) : the_post(); ?>

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

Code modifié qui affiche la date de publication, uniquement sur les publications paires numérotées dans les archives de l'auteur ...

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

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archives ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %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: // Else ?>
1
Pothi Kalimuthu