@boxe

Как в WordPress вывести первый пост отдельно от всего?

Привет, Тостер!

Я уже совсем голову сломал и отчаялся, пытаясь решить штуку, которую задумали. Есть цикл, который выводит обычные посты. Цикл обёрнут в своего div-родителя. Внутри вывода цикла своя разметка.

Что нужно мне — взять первый пост и опубликовать его над всем этим циклом (где-то над div-родителем цикла). Так вот сверстали.

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

59d4b03e27bea817944743.png

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

<?php if (($wp_query->current_post +1) == ($wp_query->post_count)) {
echo 'This is the last post';
} ?>
  • Вопрос задан
  • 2033 просмотра
Решения вопроса 1
@EvgenyMorozov
У меня работает так
<?php $first_post = get_posts( array(
	'numberposts' => 1,
	'cat' => '-3792',
	'tag__not_in' => '3867',
	'post__in' => get_option( 'sticky_posts' ),
)); ?>	

<?php $num = 1; ?>	

<?php foreach( $first_post as $post ) : setup_postdata( $post ); ?>

<article id="post-<?php the_ID(); ?>" <?php post_class( pg_get_posts_classes( $num ) ); ?>>		
	<div class="inner">
		<div class="caption">
			<div class="thumbnail">
				<a href="<?php the_permalink() ?>">
					<?php 
						if ( has_post_thumbnail() ) {
							the_post_thumbnail( 'pg-main' ); 
							} else {
							pg_first_attachment_image( $post->ID, 'pg-main' );
						}
					?>
				</a>	
			</div>
			<?php pg_entry_meta( $post->ID ); ?> 
			<h3 class="entry-title"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
			<?php the_excerpt(); ?>
		</div>
	</div>
</article>

<?php endforeach; ?>

<?php query_posts( array(
	'posts_per_page' => 8,
	'cat' => '-3792',
	'post__not_in' => array( $first_post[0]->ID ),
	'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
	));
?>

<?php $num = 2; ?>	

<?php while (have_posts()) : the_post(); ?>	
<article id="post-<?php the_ID(); ?>" <?php post_class( pg_get_posts_classes( $num ) ); ?>>	
	<?php get_template_part( 'content', get_post_format() ); ?>	
</article>
<?php $num++; ?>
<?php endwhile; ?>	
<?php wp_reset_query(); ?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
alsolovyev
@alsolovyev
Не сильно знаток WP, но в документации все есть - wp get recent posts, нет?
<h2>Recent Posts</h2>
<ul>
<?php
	$args = array( 'numberposts' => '1' );
	$recent_posts = wp_get_recent_posts( $args );
	foreach( $recent_posts as $recent ){
		echo '<li><a href="' . get_permalink($recent["ID"]) . '">' .   $recent["post_title"].'</a> </li> ';
	}
	wp_reset_query();
?>
</ul>

https://codex.wordpress.org/Function_Reference/wp_...

ps почему из общего цикла не взять первый пост, который отправится в шапку, а остальные в сетку? Зачем отдельный запрос делать?
Ответ написан
Тоже не понимаю, зачем отдельный запрос делать.
В крайнем случаи можно в while счетчик воткнуть и первый пост вывести по-другому.
Ответ написан
Комментировать
vladislav_boychenko
@vladislav_boychenko
Купаюсь в гривнах
А почему вы просто не стилизируете первый пост через CSS?
https://codepen.io/anon/pen/jGawKW
Ответ написан
@boxe Автор вопроса
Хреново описал мысль. Попробую вариант №2 с примером кода. Есть вот такое, уже свёрстано:

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

Текстом и стрелками отметил то, что есть и куда что нужно вытащить в виде одного поста. Получается делать нужно два цикла, как и предлагает Aleksey Solovyev (если я его комментарий и пример кода правильно понял)? С чего вообще подступиться к такой задаче?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы