SaW_3D
@SaW_3D
Веб-разработчик

Как вывести посты в разных местах на странице, используя цикл только 1 раз?

На странице в сумме нужно вывести 13 постов, но все они сгруппированы в разных местах (в 1м блоке - 4 поста, 2м - 3, 3м - 6)

Задумка такая, применить 1 цикл к примеру:

$args = array('posts_per_page' => 13, 'order' => 'desc');
$myposts = get_posts( $args );

А затем в разных местах выводить нужные посты. с get_posts пишут нужно только foreach использовать, но тогда всё перебирается.
-----------------
Вобщем как оптимизированно так придумать, чтобы не вызывать несколько циклов в каждом блоке? (можно использовать другие циклы)?
  • Вопрос задан
  • 332 просмотра
Решения вопроса 2
Dase23
@Dase23
back-end developer
сделайте три массива

в первом 4 элемента для первого блока

ну и дальше по аналогии.

а вообще учитывая что у вас хардкодом вписано 13 элементов.
Можно и обычный for использовать в первом блоке с 0 по 3 элемент и так далее
Ответ написан
@dtBlack
get_post возвращает вам массив.
Сколько раз его крутить в цикле не имеет значения, так же как не имеет значения в каком из типов циклов будет идти работа, тем более по задаче for подходит больше.
Но в вашем случае при фиксированном количестве позиций вывода цикл не обязателен.
Можно обращаться к элементам напрямую:
$args = array('posts_per_page' => 13, 'order' => 'desc');
$myposts = get_posts( $args ); 

......

if (isset($myposts[0])){
   //выводим первый пост $myposts[0]
}

Из минусов некрасивый код на выходе, но из плюсов предельная простота.

Для написания более компактного кода можно воспользоваться функциями для работы с массивами, а конкретно array_slice, и уже над полученными в итоге массивами работать с foreach .

$mypost1 = array_slice($myposts, 0, 4);
$mypost2 = array_slice($myposts, 4, 3);
$mypost3 = array_slice($myposts, 7, 6);

if (!empty($mypost3)){
  foreach ($mypost3 as $post){
    //вывод поста
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы