Давайте уже закроем этот вопрос. Несколько моментов:
1. Не нужно запускать цикл несколько раз, все условия проверяются внутри одного цикла.
2. Свойство $query->current_post проверяем внутри цикла, счетчик начинается с 0.
<div class="container">
<div class="row">
<?php
$args = [
'post_status' => 'publish',
'posts_per_page' => 5,
'no_found_rows' => true,
'cache_results' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
];
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
// 1я запись, целиком в .col-6
if ( $query->current_post === 0 )
{
echo '<div class="col-6">'; // Открыли .col-6
echo '<div class="post-card">';
the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
the_title();
echo '</div>';
echo '</div>'; // Закрыли .col-6
}
// 2я и 4я записи, только открываем .col-3 и выводим 1 запись
if ( $query->current_post === 1 || $query->current_post === 3 )
{
echo '<div class="col-3">'; // Открыли .col-3
echo '<div class="post-card">';
the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
the_title();
echo '</div>';
}
// 3я и 5я записи, выводим запись и закрываем .col-3
if ( $query->current_post === 2 || $query->current_post === 4 )
{
echo '<div class="post-card">';
the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
the_title();
echo '</div>';
echo '</div>'; // Закрыли .col-3
}
endwhile; ?>
</div>
</div>
Данный код выведет вот такой HTML:
<div class="row">
<div class="col-6">
<div class="post-card">
...
</div>
</div>
<div class="col-3">
<div class="post-card">
...
</div>
<div class="post-card">
...
</div>
</div>
<div class="col-3">
<div class="post-card">
...
</div>
<div class="post-card">
...
</div>
</div>
</div>
Но, важно понимать порядок постов в колонках .col-3 - он будет таким:
.col-6 .col-3 .col-3
------ ------ ------
post-1 post-2 post-4
post-3 post-5
а не вот таким:
.col-6 .col-3 .col-3
------ ------ ------
post-1 post-2 post-3
post-4 post-5
В принципе, еще есть другой путь:
- Посты получаете через get_posts() в виде массива объектов WP_Post.
- HTML генерите без цикла, формируете как вам надо.
- В нужных местах подставляете нужный объект WP_Post по его индексу в массиве.