Как стилизовать первый пост в цикле как "новый/рекомендованный"?

26 окт. 2011 г., 19:30:09
Просмотры: 14.3K
Голосов: 1

Надеюсь, смогу правильно объяснить. Я пытаюсь использовать стандартный цикл WordPress для отображения всех постов, но для первого поста мне нужно применить совершенно другой стиль в зависимости от родительской категории, к которой он относится. В этом первом посте будет много дополнительных элементов.

Сейчас я частично добиваюсь этого, используя два цикла, которые оба работают со стандартными постами. Первый цикл — это область "новый/рекомендованный" пост с параметром posts_per_page=1, а второй цикл — стандартный. Проблема в том, что посты дублируются. Я пробовал использовать offset=1 во втором цикле, но тогда перестаёт работать пагинация. Любая помощь или подсказка будет очень кстати! Ниже мой код для обоих циклов и ссылка на тестовый сайт. Спасибо!

Первый цикл (новый/рекомендованный):

<?php $custom_query = new WP_Query('posts_per_page=1'); 
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<?php
$parent_cat = array();
$post_cats = get_the_category($post->ID);
foreach( $post_cats as $post_cat ) {
if( $post_cat->parent ) $parent_cat[] = get_category( $post_cat->parent )->slug;
}
?>

<!--КОНТЕНТ ЗДЕСЬ-->


<?php endwhile; ?>
<?php wp_reset_postdata(); // сброс запроса ?>
<?php } else { ?>

Второй цикл (стандартный):

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

<!--КОНТЕНТ ЗДЕСЬ-->


<?php endwhile; else: ?>
<?php _e('Извините, нет постов, соответствующих вашему запросу.'); ?>
<?php endif; ?>

Вот ссылка на тестовый сайт, где можно увидеть, о чём я говорю: http://themes.thefragilemachine.com/gone/

Заранее спасибо за любую помощь!

0
Все ответы на вопрос 3
2

один цикл с условным оператором для выбора первой записи должен работать; пример:

<?php if( $wp_query->current_post == 0 && !is_paged() ) : ?>
/*вывод первой записи*/
<?php else : ?>
/*вывод всех остальных записей*/
<?php endif; ?>
26 окт. 2011 г. 19:54:20
Комментарии

Также проверьте is_archive() или !is_singular(), чтобы убедиться, что страница не является одиночной записью. Не знаю, имеет ли is_paged() такой же эффект.

EarnestoDev EarnestoDev
26 окт. 2011 г. 19:57:38

кажется, это работает, но отображается только 1 запись и нет анонса, http://themes.thefragilemachine.com/gone/, я заметил, что у меня есть is_paged()

The Fragile Machine The Fragile Machine
26 окт. 2011 г. 20:11:48
1

Просто добавьте переменную, которая будет работать только один раз в PHP, например так:

<?php $custom_query = new WP_Query('posts_per_page=1'); 
$i = 0; while($custom_query->have_posts()) : $custom_query->the_post(); ?>

<?php if($i==0){ 

// делаем - выводим что угодно 

$i++; 

} else { 

// остальные записи

} ?>  

<?php endwhile; ?>
<?php wp_reset_postdata(); // сброс запроса ?>
26 окт. 2011 г. 19:56:39
Комментарии

хм.. Я получаю синтаксическую ошибку в этом

The Fragile Machine The Fragile Machine
26 окт. 2011 г. 20:27:36
0

Просто проверьте значение current_post

if(0 == $custom_query->current_post){ /**это первый пост**/ }
20 окт. 2017 г. 22:29:32