Вывести первый пост отдельно от всего
Привет! (Не уверен с тематикой вопроса, хотелось выбрать сразу три, если что – поправьте меня?) Я уже совсем голову сломал и отчаялся, пытаясь решить штуку, которую задумали. Есть цикл, который выводит обычные посты. Цикл обёрнут в своего родителя. Внутри вывода цикла своя разметка. Что нужно мне – взять первый пост и опубликовать его над всем этим циклом. Так вот сверстали.
Схематичное изображение:
Как быть? Знаю, что циклы дублировать нельзя, но два на странице могут существовать. Знаю, что последний пост можно проверить так:<?php if (($wp_query->current_post +1) == ($wp_query->post_count)) { echo 'This is the last post'; } ?>
Но что делать дальше вообще не представляю. Ребята, помогите, а?
забыл совсем! первый пост при этом всё в стандратном виде показывать не нужно же. это тоже важно учесть
В принципе, вам нужно найти первую запись в цикле и оформить ее по особенному, как и все прочие по своему. Делаем так:
Добавьте в functions.php
function modify_my_query( $query ) { if ( $query->is_main_query() && ! $query->is_admin() ) { $query->set( 'posts_per_page', 24 ); } } add_action( 'pre_get_posts', 'modify_my_query' );
Теперь в шаблоне в вашем цикле:
if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $wp_query->current_post == 0 ) : // Это первый пост, вставляем сюда код для вывода/оформления первого поста else : // а тут - для всех остальных постов оформление endif; endwhile; endif;
Можно включить счетчик и отловить первую запись в цикле:
<?php $postCount = 0; if (have_posts()) : while (have_posts()) : the_post(); $postCount++ ; if ($postCount == '1') { //нашли первую запись <h2 class="first"></h2> <?php } ELSE { ?> <h2 class="last"></h2> <?php } ?> <?php endwhile; ?>
(не могу добавлять комментарии к ответам из-за рейтинга) Увы, варианты не совсем те. Вот сомтрите, как это в коде:
<?php get_header(); ?> → А вот сюда надо вывести первый пост. ← <div class="grid-wrap"> <div class="masogridnry"> ↓ Стандартный вывод постов без самого первого (свежего), он должен быть вверху. ↓ <?php if( have_posts() ): while( have_posts() ): the_post(); ?> <a href="<?php the_permalink(); ?>" class="link-<?php the_ID(); ?>"> <div class="post"> <h1><?php the_title(); ?></h1> </div> </a> <?php endwhile; ?> <?php else: ?> <p>Ничего нет, что странно.</p> <?php endif; wp_reset_query(); ?> </div><!-- /.masonry --> </div><!-- /.grid --> <?php get_footer(); ?>
Как быть с такой разметкой?
Не проверял, но вроде так:
<?php get_header(); ?> <?php $postCount = 0; if (have_posts()) : while (have_posts()) : the_post(); $postCount++ ; if ($postCount == '1') { //нашли первую запись <a href="<?php the_permalink(); ?>" class="link-<?php the_ID(); ?>"> <div class="post"> <h1><?php the_title(); ?></h1> </div> </a> <div class="grid-wrap"> <div class="masogridnry"> <?php } ELSE { ?> <a href="<?php the_permalink(); ?>" class="link-<?php the_ID(); ?>"> <div class="post"> <h1><?php the_title(); ?></h1> </div> </a> <?php } ?> <?php endwhile; ?> <?php else: ?> <p>Ничего нет, что странно.</p> <?php endif; wp_reset_query(); ?> </div><!-- /.masonry --> </div><!-- /.grid --> <?php get_footer(); ?>