Пользовательский цикл WordPress: статьи не в том же порядке, что в массиве

2 янв. 2023 г., 11:55:16
Просмотры: 36
Голосов: 0

Я работаю над новостным сайтом, где есть верхняя секция с восемью рекомендуемыми статьями. Для этих статей я использую поля ACF, в которые ввожу их ID. Вот как выглядит цикл:

$kiemelt1 = get_field('kiemelt_1', 'option');
$kiemelt2 = get_field('kiemelt_2', 'option');
$kiemelt3 = get_field('kiemelt_3', 'option');
$kiemelt4 = get_field('kiemelt_4', 'option');
$kiemelt5 = get_field('kiemelt_5', 'option');
$kiemelt6 = get_field('kiemelt_6', 'option');
$kiemelt7 = get_field('kiemelt_7', 'option');
$kiemelt8 = get_field('kiemelt_8', 'option');

$kiemeltek = array($kiemelt1, $kiemelt2, $kiemelt3, $kiemelt4, $kiemelt5, $kiemelt6, $kiemelt7, $kiemelt8);

$args = array(
    'posts_per_page' => 8,
    'post__in' => $kiemeltek,
);
$wp_query = new WP_Query( $args );

if (have_posts()) {
    $i = 0;
    while ( have_posts() ) {
        the_post();
        $i++;

   if ($i == 1) { 
       //Стандартный HTML для $kiemelt1
   }
   
   if ($i == 2) { 
       //Стандартный HTML для $kiemelt2
   }
   
   .... и т.д.

Секция заполняется правильно и в основном работает, но проблема возникает при обновлении массива через страницу опций.

Пример:

Я меняю ID в $kiemelt1 и $kiemelt2. Статьи загружаются, но порядок не обновляется. Почему так происходит?

Что я пробовал:

Я пытался изменить условие, чтобы помимо проверки $i на конкретное число, дополнительно проверял ID:

if ($i == 1 && get_the_id($kiemelt1) ) { } например, но это ломает верстку.

Спасибо!

2
Комментарии

Мне удалось решить эту проблему, создав 8 отдельных циклов, но я не уверен, почему это было необходимо. Я создал массив $kiemeltek, поэтому предполагал, что цикл будет перебирать: $kiemeltek[0], $kiemeltek[1], $kiemeltek[2] и так далее. Но этого не произошло. Существует ли более правильный способ решения этой проблемы, кроме использования отдельных запросов?

Pbalazs89 Pbalazs89
2 янв. 2023 г. 14:47:05

Укажите порядок в ваших $args.

rudtek rudtek
2 янв. 2023 г. 17:44:47
Все ответы на вопрос 1
0

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

$args = array(
    'posts_per_page' => 8,
    'post__in'       => $kiemeltek,
    'orderby'        => 'post__in',
);
3 янв. 2023 г. 05:47:52