Intereting Posts
Минимизация количества запросов на странице при использовании дополнительных настраиваемых полей Как передать переменную hook в функцию? Форма поиска как элемент списка в меню? get_template_directory vs get_stylesheet_directory Отображать содержимое post_object с помощью плагина Advanced Custom Fields Как я могу создать копию моего сайта в подкаталоге для тестирования темы? Ключ profile_update не работает внутри класса Полностью отключить редактор См. Схему базы данных сайта Получить таблицу стилей для отображения в редакторе панели управления WP Пользовательское изображение для каждого автора, NOT profileImage – Только передняя часть Перечислите всю конкретную таксономию, если нет пули Как добавить условные обозначения для браузеров IE между определенными версиями? Удаление удаленных версий ревизий вручную Добавить пользовательский контент на несуществующую страницу

Получайте последние 3 сообщения из нескольких CPT в одном запросе

Я хочу создать сайт на моем сайте и создать несколько настраиваемых типов сообщений. Я бы хотел показать 3 сообщения по меньшей мере из трех разных типов сообщений. Я могу получить последние 10 сообщений в каждом типе сообщений, и я могу получить последние 10 в целом, но я бы хотел указать, что я получаю только 3 от каждого, так что все равно. Лучше всего это сделать 3 разных запроса, а затем объединить их? Я получаю, как сделать это отдельно, но я хочу, чтобы все они были интегрированы и отсортированы по метке времени. Какие-либо предложения?

Этот метод использует счетчик и 1 запрос. Только три сообщения из каждого типа сообщения могут отображаться.

$args = array( 'post_type' => array( 'type1', 'type2', 'type3' ), 'posts_per_page' => -1 ); $myquery = new WP_Query( $args ); $type1 = 0; $type2 = 0; $type3 = 0; $count = 0; while ( $myquery->have_posts() ) : $myquery->the_post(); if ( $post->post_type == 'type1' ) $type1++; if ( $post->post_type == 'type1' && $type1 > 3 ) continue; if ( $post->post_type == 'type2' ) $type2++; if ( $post->post_type == 'type2' && $type2 > 3 ) continue; if ( $post->post_type == 'type3' ) $type3++; if ( $post->post_type == 'type3' && $type3 > 3 ) continue; $count++; if ( $count > 9 ) continue; // Do Stuff endwhile; 

Это может быть не лучшее решение, если у вас действительно большое количество сообщений, потому что он будет проходить через все сообщения, и если счетчик будет выше 3 для данного типа сообщения, он вернется к началу цикла.