Как получить массив данных записей из результата wp_query?

11 авг. 2012 г., 07:05:53
Просмотры: 212K
Голосов: 61

Когда я выполняю запрос с помощью метода WP_Query, я получаю объект. Я понимаю, что могу использовать цикл для отображения данных. Но моя цель не в том, чтобы что-то отображать, а в том, чтобы получить данные записей с помощью чего-то вроде "foreach...". Как мне получить массив данных записей, по которому я могу пройтись циклом и получить нужные данные?

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

Важное отличие, о котором нужно помнить при прямом доступе к данным записи по сравнению с использованием тегов шаблонов, заключается в том, что фильтры не применяются к данным и некоторые функции могут перестать работать.

Milo Milo
30 дек. 2016 г. 20:10:10
Все ответы на вопрос 3
5
114

Вам следует ознакомиться с справочником функций для WP_Query в WordPress Codex. Там вы найдёте множество примеров для изучения. Если вы не хотите использовать цикл while для перебора результатов запроса, вы можете получить все записи, возвращаемые запросом WP_Query, через свойство posts.

Например:

$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;

foreach($posts as $post) {
    // Делайте что нужно, например:
    // echo $post->post_name;
}
11 авг. 2012 г. 11:35:25
Комментарии

Ни один из примеров, на которые вы ссылаетесь, не демонстрирует обработку записей. Хорошо, что вы ответили, жаль, что этого нет в документации. Ещё совет: если вы ищете уникальную запись, можно использовать функцию с 'posts_per_page'=>1 в аргументах. function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }

Henrik Erlandsson Henrik Erlandsson
21 мар. 2014 г. 11:38:07

@rofflox: Ты святой! Отличный способ обойти get_the_title/ID/и тому подобное.

Vial Vial
30 апр. 2015 г. 20:39:34

Лучше использовать $query->posts, так как $query->get_posts() запускает повторный разбор запроса и дополнительные ненужные запросы к базе данных

Tom J Nowell Tom J Nowell
1 нояб. 2015 г. 05:31:12

Метод $query->get_posts(); работает не так, как ожидалось. Непонятно почему, но он возвращает меньше записей, чем в запросе. Смотрите здесь: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work

Laxmana Laxmana
12 нояб. 2016 г. 19:05:55

Этот ответ совершенно неверен. Когда вы создаете новый WP_Query с некоторыми аргументами, метод get_posts() вызывается внутренне сразу же, и ВАМ НЕ СЛЕДУЕТ ВЫЗЫВАТЬ ЕГО СНОВА! Если вы вызовете его снова, как показано в примере выше, будет выполнен ДРУГОЙ запрос, в зависимости от аргументов и результатов первоначального выполнения (установленные внутренние флаги и т.д.), и он может вернуть другой (меньший) набор результатов или вообще не вернуть ничего. Как верно отметили TomJNowell и Laxmana выше, для получения данных записей следует использовать $query->posts.

ivanhoe ivanhoe
4 дек. 2016 г. 05:20:47
6
17

На самом деле, вам не нужно отказываться от использования цикла while(). Тот же объект WP_Post уже хранится в свойстве post:

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

    // какой-то код здесь, если нужно.

    while ( $query->have_posts() ) {

        $query->the_post();

        // теперь $query->post - это объект WP_Post, используйте:
        // $query->post->ID, $query->post->post_title и т.д.

    }
                
}
1 окт. 2015 г. 22:42:27
Комментарии

if является избыточным.

Akkumulator Akkumulator
26 янв. 2017 г. 15:40:27

Нет, if не избыточен. В данном конкретном случае — да, но в большинстве рабочих ситуаций между if и while есть код для выполнения.

magi182 magi182
27 мар. 2017 г. 18:36:32

@magi182 Что делает его избыточным в данном конкретном случае. Люди должны учиться, когда это использовать.

frodeborli frodeborli
3 апр. 2017 г. 21:05:31

@frodeborli, Приятная особенность утверждений, начинающихся с "люди должны" — почти всегда можно заменить на "люди не будут", и утверждение останется верным.

magi182 magi182
6 апр. 2017 г. 06:28:21

@magi182 Я мог бы написать сотню полезных строк кода в дополнение к приведённому выше коду.

frodeborli frodeborli
9 апр. 2017 г. 00:01:09

это должен быть выбранный ответ

bysanchy bysanchy
27 окт. 2018 г. 09:41:53
Показать остальные 1 комментариев
0

вы также можете использовать get_posts( $args ) вместо wp_Query(), что даст вам список записей

16 апр. 2019 г. 12:17:02