Cum să obții un HTML diferit pentru articole pare/impare?

6 sept. 2013, 16:31:25
Vizualizări: 22.5K
Voturi: 6
    // Interogare articole  
      if posts exist 
        then begin the loop
          if post is even: <h1>titlu</h1><p>conținut</p>
          if post is odd: <div>imaginea sa</div>

Iată ce încerc să obțin, un rezultat diferit pentru articolele pare/impare: pentru articolele pare vom afișa titlul și conținutul în timp ce pentru articolele impare vom afișa imaginea acestora (thumbnail-ul, de exemplu). Cum pot obține acest rezultat?

Fac interogarea articolelor în acest mod

query_posts('category_name=category-name');

apoi nu știu cum să continui

3
Comentarii

Postează tot codul tău, te rog. Și nu folosi deloc query_posts. Apropo, această întrebare a fost răspunsă de multe ori. Caută puțin și editează întrebarea cu ceva mai specific.

s_ha_dum s_ha_dum
6 sept. 2013 16:42:07

@s_ha_dum îmi pare rău, nu am cod. Dacă aș avea cod, nu aș fi aici.

marco marco
6 sept. 2013 16:47:33

Ok. Ți-am dat un punct de plecare. Această întrebare a fost pusă și răspunsă de multe ori în multe variații. Și în al doilea rând, nu ai deloc cod pentru loop? Formatul întrebărilor pe acest site este "Cum pot repara acest cod defect?" nu "Poți, te rog frumos, să-mi scrii codul?"

s_ha_dum s_ha_dum
6 sept. 2013 16:57:32
Toate răspunsurile la întrebare 3
0
14

Nu ai nevoie de o nouă variabilă pentru numărarea postărilor, WordPress are deja una în $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 ?>

Dacă folosești o instanță personalizată WP_Query așa cum a sugerat iEmanuele, atunci va fi $query->current_post în schimb.

14 feb. 2014 18:13:33
0

Te rog să nu folosești query_posts();, în schimb folosește clasa WP_Query sau get_posts();.

Pentru a ținti postările impare/pare în bucla ta:

//Voi folosi o instanță a clasei WP_Query
$args( 'post_type' => 'recipe', 'posts_per_page' => 5 );

//Setăm un contor
$counter = 0;

//Pregătim bucla
$query = new WP_Query( $args );

//În bucla while contorul crește cu unu $counter++
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); $counter++;

    //Suntem în buclă, deci putem verifica dacă contorul este par sau impar
    if( $counter % 2 == 0 ) : //Este par

        the_title(); //Afișează titlul postării
        the_content(); //Afișează conținutul postării

    else: //Este impar

        if( has_post_thumbnail() ) : //Dacă postarea are imagine reprezentativă, o afișăm
            the_post_thumbnail();
        endif;

    endif;

endwhile; wp_reset_postdata(); endif;

Sper că te ajută!

6 sept. 2013 17:02:06
0

Poți avea o nouă variabilă pentru a număra postările, apoi să o incrementezi în interiorul while loop-ului și apoi să verifici dacă este impară sau pară. Iată un exemplu de cod din fișierul loop.php al temei Blaskan care afișează arhivele unui autor...

<?php // Începe loop-ul ?>
<?php while ( have_posts() ) : the_post(); ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Arhive ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Legătură permanentă către %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: // Altfel ?>

Cod modificat care afișează data publicării, doar pentru postările cu număr par în arhivele unui autor...

<?php $posts_count = 1; // Începe loop-ul ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php ++$posts_count; ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Arhive ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Legătură permanentă către %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: // Altfel ?>
6 sept. 2013 16:59:35