WP_query для получения двух последних записей, затем другой цикл для получения следующих трех
Моя конечная цель - вывести 5 последних записей, независимо от категории.
Сначала я хочу создать WP_Query для получения двух последних записей и вставить их в определенную HTML структуру.
Затем я хочу создать другой WP_Query для получения следующих трех записей и вставить их в отличающуюся HTML структуру.
Я пробовал несколько фрагментов кода, и в результате каждый WP_Query начинает с самой последней записи в обеих HTML структурах. Существует ли аргумент, который я могу использовать, чтобы указать второму запросу пропустить первые две записи?
Выполнить один wp_query для post_per_page = 2 и получить ID этих 2 записей в массив, чтобы исключить их в следующих 3 необходимых записях
<?php
// Запрос
$next_args = array(
'post_type' => '<ваш_тип_записи>',
'post_status' => 'publish',
'posts_per_page'=>2,
'order'=>'DESC',
'orderby'=>'ID',
);
$the_query = new WP_Query( $args );
// Цикл
if ( $the_query->have_posts() ) {
$not_in_next_three = array();
while ( $the_query->have_posts() ) {
$the_query->the_post();
// ваш HTML для последних 2 записей
$not_in_next_three[] = get_the_ID();
}
} else {
// записи не найдены
}
/* Восстановить оригинальные данные записи */
wp_reset_postdata();
Теперь созданный выше массив будет исключен в wp_query при получении следующих 3 записей
// Запрос
$next_args = array(
'post_type' => '<ваш_тип_записи>',
'post_status' => 'publish',
'posts_per_page'=>3,
'order'=>'DESC',
'orderby'=>'ID',
'post__not_in'=>$not_in_next_three
);
$next_the_query = new WP_Query( $next_args );
// Цикл
if ( $next_the_query->have_posts() ) {
while ( $next_the_query->have_posts() ) {
$next_the_query->the_post();
// ваш HTML для следующих 3 записей
}
} else {
// записи не найдены
}
/* Восстановить оригинальные данные записи */
wp_reset_postdata();
?>
Добавьте пояснение к вашему коду и используемому методу. Это явно можно сделать одним запросом, а не двумя.
Pieter Goosen
Да, можно сделать одним запросом... но автор вопроса просил именно 2 wp_query.. поэтому...
Prakash Rao
Я решил эту проблему, выполнив два WP_Query на одной странице и используя параметр offset во втором наборе аргументов.
Хотелось бы узнать, как использовать один запрос и достичь того же результата.
C. Ruben
Вы можете использовать параметры пагинации WP_Query.
Однако использование двух запросов для достижения этой цели неэффективно. Лучшее решение — использовать один запрос и изменять вашу разметку на основе значения свойства $current_post в WP_Query, которое (при использовании в цикле) отражает индекс текущего обрабатываемого поста на текущей странице результатов.