WP_query для получения двух последних записей, затем другой цикл для получения следующих трех

3 февр. 2016 г., 00:38:33
Просмотры: 36.7K
Голосов: 5

Моя конечная цель - вывести 5 последних записей, независимо от категории.

Сначала я хочу создать WP_Query для получения двух последних записей и вставить их в определенную HTML структуру.

Затем я хочу создать другой WP_Query для получения следующих трех записей и вставить их в отличающуюся HTML структуру.

Я пробовал несколько фрагментов кода, и в результате каждый WP_Query начинает с самой последней записи в обеих HTML структурах. Существует ли аргумент, который я могу использовать, чтобы указать второму запросу пропустить первые две записи?

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

Также, на мой взгляд, это можно сделать одним запросом.

Laxmana Laxmana
3 февр. 2016 г. 00:42:28
Все ответы на вопрос 2
5

Выполнить один 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();

?>
3 февр. 2016 г. 12:17:10
Комментарии

Добавьте пояснение к вашему коду и используемому методу. Это явно можно сделать одним запросом, а не двумя.

Pieter Goosen Pieter Goosen
3 февр. 2016 г. 12:18:54

Да, можно сделать одним запросом... но автор вопроса просил именно 2 wp_query.. поэтому...

Prakash Rao Prakash Rao
3 февр. 2016 г. 12:19:59

проверьте обновленный ответ теперь @peiter Goosen

Prakash Rao Prakash Rao
3 февр. 2016 г. 12:23:05

Я решил эту проблему, выполнив два WP_Query на одной странице и используя параметр offset во втором наборе аргументов.

Хотелось бы узнать, как использовать один запрос и достичь того же результата.

C. Ruben C. Ruben
11 февр. 2016 г. 00:59:43

Это можно сделать одним wp_query, увеличивая счетчик и изменяя HTML-структуру на основе счетчика.

Prakash Rao Prakash Rao
11 февр. 2016 г. 14:56:37
0

Вы можете использовать параметры пагинации WP_Query.

Однако использование двух запросов для достижения этой цели неэффективно. Лучшее решение — использовать один запрос и изменять вашу разметку на основе значения свойства $current_post в WP_Query, которое (при использовании в цикле) отражает индекс текущего обрабатываемого поста на текущей странице результатов.

3 февр. 2016 г. 00:45:59