Сортировка и включение массива по определенным ID записей

12 сент. 2011 г., 20:35:54
Просмотры: 44K
Голосов: 9

У меня есть следующий код:

<?php $num_cols = 2; // установите здесь количество колонок


            $args = array(
                    'post_type' => 'testimonials',
                    'posts_per_page' => 4,
                    'orderby' => 'ID', 
                    'include' => '883, 563, 568, 106',                                  
                    'order' => ''           

                    ); 
            query_posts($args);
            if (have_posts()) :
            for ( $i=1 ; $i <= $num_cols; $i++ ) :
            echo '<div id="col-'.$i.'" class="col">';
            $counter = $num_cols + 1 - $i;
            while (have_posts()) : the_post();

            if( $counter%$num_cols == 0 ) : ?>
                <div id="box">

                <?php the_post_thumbnail('post-thumbnail', array('title' => '', 'alt' => '')); ?>



                <?php the_excerpt();?>
                </div>
                <?php endif; $counter++;
                  endwhile;
                  echo '</div>'; 
                  endfor;
                  endif; 
                wp_reset_query(); 
                ?>

Я думал, что просто указав ID записей, я смогу отобразить конкретные записи, и только их. К сожалению, это не работает. Поэтому я хотел бы узнать, знает ли кто-нибудь, как я могу это реализовать.

Заранее спасибо!

0
Все ответы на вопрос 4
3
28
$args = array(
    'post_type' => 'testimonials', // Тип записи - отзывы
    'posts_per_page' => 4, // Количество выводимых записей
    'orderby' => 'post__in', // Сортировка по порядку ID в массиве
    'post__in' => array(883, 563, 568, 106) // Массив ID записей в нужном порядке
);

Использование параметра post__in в значении orderby позволит сохранить порядок записей согласно массиву ID, переданному в post__in

2 мая 2013 г. 22:42:48
Комментарии

Добро пожаловать в WPSE и сеть SE, @stephenkeable! Отличное форматирование и чёткий, лаконичный ответ. Так держать ;)

bosco bosco
2 мая 2013 г. 23:24:08

Этот ответ должен быть первым, так как я сначала прочитал комментарий Мило и подумал, что не могу легко отсортировать по post__in. Очень полезно, большое спасибо!

Matthias S Matthias S
15 нояб. 2016 г. 19:41:25

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

Sergei Zahharenko Sergei Zahharenko
10 нояб. 2017 г. 13:42:41
2
22

Используйте ключ post__in вместо include для получения записей по определённым ID.

$args = array(
    'post_type' => 'testimonials',
    'posts_per_page' => 4,
    'orderby' => 'ID', 
    'post__in' => array(883, 563, 568, 106),
); 

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

$args = array(
       'post_type' => 'testimonials',
       'posts_per_page' => 4,
      'orderby' => 'post__in', 
      'post__in' => array(883, 563, 568, 106),
   );
12 сент. 2011 г. 21:14:56
Комментарии

Спасибо, Мило! Мне удалось сделать так, чтобы конкретные записи отображались, но не в том конкретном порядке, который я хотела.

Nina Nina
12 сент. 2011 г. 22:03:40

@Нина - это происходит из-за того, как работает движок базы данных MySQL. Самый простой способ получить нужный вам порядок - это перебрать ваш массив ID, и для каждого ID перебрать посты, чтобы найти соответствующий результат. Другой ваш вариант более сложный и требует непосредственного изменения SQL-запроса, чтобы заставить MySQL выбирать их в этом конкретном порядке.

Milo Milo
12 сент. 2011 г. 22:10:16
1

для меня это работает при удалении двоеточия "; " и замене его на запятую "," вот так:

                   'orderby' => 'post__in',
                   'post__in' => array(185, 157, 163),
14 дек. 2016 г. 18:41:22
Комментарии

Сработало просто отлично :)

hemnath mouli hemnath mouli
14 янв. 2017 г. 15:56:58
0

Вы можете использовать вот так... где $localservicesselectlocalservices - это массив из таблицы wp_postmeta

$localservicesselectlocalservices = get_post_meta($post_id, 'local_services_select_local_services', true);
$args = array(
    'post_type'     => array($post_type),
    'post_status'   => array('publish'),
    'post__in' => $localservicesselectlocalservices,
    'orderby' => 'post__in'
    
);
$query = new WP_Query($args);

Это даст вам массив записей в том же порядке, что и в $localservicesselectlocalservices

19 апр. 2023 г. 13:32:34