как получить разную html-разметку для четных/нечетных записей?

6 сент. 2013 г., 16:31:25
Просмотры: 22.5K
Голосов: 6
    запрос записей
      если записи существуют
        начинаем цикл
          если запись четная: <h1>заголовок</h1><p>содержимое</p>
          если запись нечетная: <div>изображение</div>

вот что я пытаюсь получить - разный вывод для четных/нечетных записей: для четных записей мы будем показывать заголовок и содержимое, а для нечетных записей будем показывать изображение (например, миниатюру). Как получить такой результат?

Я делаю запрос записей таким образом

query_posts('category_name=category-name');

затем я не знаю, как продолжить

3
Комментарии

Пожалуйста, опубликуйте весь ваш код. И не используйте query_posts вообще. Кстати, этот вопрос уже много раз обсуждался. Проведите исследование и отредактируйте вопрос, сделав его более конкретным.

s_ha_dum s_ha_dum
6 сент. 2013 г. 16:42:07

@s_ha_dum извините, у меня нет кода. Если бы у меня был код, я бы не оказался здесь.

marco marco
6 сент. 2013 г. 16:47:33

Хорошо. Я дал вам отправную точку. Этот вопрос задавался и получал ответы множество раз в разных вариациях. И во-вторых, у вас вообще нет кода цикла? Формат вопросов на этом сайте - "Как мне исправить этот сломанный код?", а не "Не могли бы вы, пожалуйста, написать код за меня?"

s_ha_dum s_ha_dum
6 сент. 2013 г. 16:57:32
Все ответы на вопрос 3
0
14

Вам не нужна новая переменная для подсчета постов, в WordPress уже есть такая — $wp_query->current_post.

<?php while (have_posts()): the_post() ?>
    <?php if ($wp_query->current_post % 2 == 0): ?>
        чётный
    <?php else: ?>
        нечётный
    <?php endif ?>
<?php endwhile ?>

Если вы используете кастомный экземпляр WP_Query, как предложил iEmanuele, тогда вместо этого будет $query->current_post.

14 февр. 2014 г. 18:13:33
0

Пожалуйста, не используйте query_posts();, вместо этого используйте класс WP_Query или get_posts();.

Для выделения нечетных/четных записей в вашем цикле:

//Я буду использовать экземпляр класса WP_Query
$args( 'post_type' => 'recipe', 'posts_per_page' => 5 );

//Устанавливаем счетчик
$counter = 0;

//Подготовка цикла
$query = new WP_Query( $args );

//В цикле while счетчик увеличивается на единицу $counter++
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); $counter++;

    //Мы находимся в цикле, поэтому можем проверить, четный или нечетный счетчик
    if( $counter % 2 == 0 ) : //Четный

        the_title(); //Выводим заголовок записи
        the_content(); //Выводим содержимое записи

    else: //Нечетный

        if( has_post_thumbnail() ) : //Если у записи есть миниатюра, показываем ее
            the_post_thumbnail();
        endif;

    endif;

endwhile; wp_reset_postdata(); endif;

Надеюсь, это поможет!

6 сент. 2013 г. 17:02:06
0

Вы можете создать новую переменную для подсчета количества записей, затем увеличивать её внутри цикла while и проверять, является ли число чётным или нечётным. Вот пример кода из файла loop.php темы Blaskan, который выводит архивы автора...

<?php // Начало цикла ?>
<?php while ( have_posts() ) : the_post(); ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Архивы ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %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: // Иначе ?>

Модифицированный код, который выводит дату публикации только для чётных записей в архивах автора...

<?php $posts_count = 1; // Начало цикла ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php ++$posts_count; ?>

<?php if ( ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Архивы ?>
    <li>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %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: // Иначе ?>
6 сент. 2013 г. 16:59:35