Вывести первый пост отдельно от всего

Привет! (Не уверен с тематикой вопроса, хотелось выбрать сразу три, если что – поправьте меня?) Я уже совсем голову сломал и отчаялся, пытаясь решить штуку, которую задумали. Есть цикл, который выводит обычные посты. Цикл обёрнут в своего родителя. Внутри вывода цикла своя разметка. Что нужно мне – взять первый пост и опубликовать его над всем этим циклом. Так вот сверстали.

Схематичное изображение:

Вывести первый пост отдельно от всего

Как быть? Знаю, что циклы дублировать нельзя, но два на странице могут существовать. Знаю, что последний пост можно проверить так:

 <?php if (($wp_query->current_post +1) == ($wp_query->post_count)) { echo 'This is the last post'; } ?> 

Но что делать дальше вообще не представляю. Ребята, помогите, а?

Новичок Вопрос задан в 04.10.2017 в Внешний вид.
Добавить комментарий
4 Ответ (-ов)

    забыл совсем! первый пост при этом всё в стандратном виде показывать не нужно же. это тоже важно учесть

    Новичок Отвечено в 04.10.2017.
    Добавить комментарий

      В принципе, вам нужно найти первую запись в цикле и оформить ее по особенному, как и все прочие по своему. Делаем так:

      Добавьте в 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;
      
      

       

      Мастер Отвечено в 04.10.2017.
      Добавить комментарий

        Можно включить счетчик и отловить первую запись в цикле:

        
        <?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; ?>
        
        
        Гуру Отвечено в 04.10.2017.
        Добавить комментарий

          (не могу добавлять комментарии к ответам из-за рейтинга) Увы, варианты не совсем те. Вот сомтрите, как это в коде:

          <?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(); ?>
           

          Как быть с такой разметкой?

          Новичок Отвечено в 04.10.2017.

          Не проверял, но вроде так:

          <?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(); ?>
          
          
          в 07.10.2017.
          Добавить комментарий

          Ваш ответ

          Размещая свой ответ, вы соглашаетесь с политикой конфиденциальности и условиями предоставления услуг.