Intereting Posts
Комментарии включены, но отключены одновременно. Сортировка сообщений по метазначениям: 2 разных порядка Редактируемый контент на странице пользовательского архива Как получить все должности в категории, которые были опубликованы между двумя датами? Проблема при загрузке прошлых 8MB? Сайт разбит на тему активации детской темы! Как передать переменную для пар ключ / значение в аргументе? Как заменить результаты поиска, отображаемые WordPress? Изменить название страницы перед выходом через wp_page_list Добавление пользовательских слизней: родительская страница / имя пользователя / дочерняя страница / JavaScript и Google PageSpeed ​​+ wp_enqueue_script Woocommerce: показать цену изменения по умолчанию – список продуктов? Переключение с HTML на визуальный редактор и обратно Билет поддержки JS – автоматическое создание учетной записи WP Поиск и устранение неисправностей fetch_feed и SimplePie

Заказ сообщений по массиву

У меня есть запрос, который возвращает несколько различных пользовательских типов сообщений. Я хочу заказать массив сообщений по содержимому массива типов сообщений; например, array('post', 'video', 'testimonial'..... );

Массив, порядок, фиксирован.

Как я могу управлять этим, не делая другого запроса для каждого типа сообщения?

Solutions Collecting From Web of "Заказ сообщений по массиву"

Это невозможно с помощью родного API, и вам, вероятно, будет довольно плохо взломать SQL для него.

Это было бы довольно тривиально, чтобы повторно сортировать сообщения, подобные этому после того, как они будут восстановлены с помощью PHP-кода. если вы используете get_posts() вы получаете массив, которым вы манипулируете уже, и для массива результатов объекта WP_Query доступен в общедоступном свойстве $posts .

Обратите внимание, это предполагает, что вам не нужно разбивать страницы на этот запрос. В этом случае вещи становятся очень грязными очень быстро и обратно в гору пользовательского SQL.

Вы можете использовать цикл foreach для отображения вашего контента в этом порядке. цикл в значениях в вашем массиве, в каждом цикле есть оператор foreach который перебирает ваши сообщения и проверяет, равен ли тип post равным значению в вашем массиве, в котором он сейчас находится.

 $query = //whatever your query is; $array = //your array foreach ($array as $value) { foreach ($query as $post) { if ($post->post_type == $value) { //code to show that thing } } } 

Благодаря mrben522 для указания пути;

 <? $args = array( 'post_type' => 'any', 'category__in' => wp_get_post_categories($post->ID), 'posts_per_page' => 7, 'post__not_in' => array($post->ID) , ); $related = new WP_Query($args); if( $related->have_posts() ) : ?> <ul class="related-posts"> <? $array = array ('article', 'post', 'video', 'webinar', 'factsheet','whitepaper', 'casestudy'); foreach ($array as $value) { while( $related->have_posts() ) : $related->the_post() ; if ($post->post_type == $value) { get_template_part('template-parts/content', 'related'); } endwhile; rewind_posts(); } ?> </ul> <? endif; wp_reset_postdata(); ?>