web-dev-qa-db-de.com

wie bekomme ich ein anderes HTML für gerade/ungerade Posts?

    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>

dies ist, was ich versuche zu bekommen, eine andere Ausgabe für ungerade/gerade Beiträge: Für gerade Beiträge zeigen wir den Titel und den Inhalt, während für ungerade Beiträge wir sein Bild zeigen (das Thumbnail zum Beispiel). Wie kommt man zu diesem Ergebnis?

Ich frage den Beitrag auf diese Weise ab

query_posts('category_name=category-name');

dann weiß ich nicht, wie ich weitermachen soll

4
marco

Sie brauchen keine neue Variable zum Zählen von Beiträgen, WordPress hat bereits eine in $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 ?>

Wenn Sie eine benutzerdefinierte WP_Query -Instanz verwenden, wie von iEmanuele vorgeschlagen, ist dies stattdessen $query->current_post.

8

Bitte keine query_posts () verwenden; , benutze stattdessen WP_Query class oder get_posts(); .

So zielen Sie auf ungerade/gerade Posts in Ihrer Schleife:

//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;

Ich hoffe es hilft!

4
iEmanuele

Sie können eine neue Variable erstellen, um die Anzahl der Posts zu zählen. Erhöhen Sie sie dann in der while-Schleife und prüfen Sie, ob sie ungerade oder gerade ist. Hier ist ein Beispielcode aus der Datei Blaskan theme 's loop.php, in der die Archive eines Autors angezeigt werden ...

<?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 ?>

Geänderter Code, der das Veröffentlichungsdatum anzeigt, nur für geradzahlige Posts in den Archiven eines Autors ...

<?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