Як отримати масив даних публікації з результату wp_query?


35

Під час запуску запиту методом WP_Query я отримав об’єкт. Я розумію, що потім можу зробити цикл для відображення матеріалів. Але моя мета - не відображати нічого, натомість я хочу отримати деякі публікаційні дані, роблячи щось на кшталт "foreach ...". Як я можу отримати масив поштових даних, за допомогою яких я можу переглядати та отримувати дані?


2
Важлива відмінність, яку слід пам’ятати між доступом до даних публікації безпосередньо проти використання тегів шаблонів, полягає в тому, що фільтри не застосовуються до даних, а деякі функції можуть порушитися.
Міло

Відповіді:


73

Ви повинні прочитати посилання на функцію для WP_Query у кодексі WordPress. Там у вас є чимало прикладів для перегляду. Якщо ви не хочете перебирати набір результатів за допомогою a while, ви можете отримати всі повідомлення, повернені за запитом із WP_Queryвластивістю в posts.

Наприклад

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

foreach($posts as $post) {
    // Do your stuff, e.g.
    // echo $post->post_name;
}

1
Жоден із прикладів, на які ви посилаєтесь, не демонструє, як обробляти публікації. Тож добре, що ви відповіли, шкода, що їх немає в документації. Ще одна порада: якщо ви робите матч на унікальній публікації, ви можете використовувати функцію, подібну до цього, '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; }
Генрік Ерландссон

@rofflox: Ти святий! Відмінно підходить для обходу get_the_title / ID / younameit.
Флакон

8
Ви повинні скористатися $query->postsнатомість, $query->get_posts()це спровокує повторний аналіз запиту та додаткові непотрібні запити бази даних
Tom J Nowell

$ query-> get_posts (); не працює, як очікувалося. Не знаю, чому, але він повертає менше публікації, ніж запит. Дивіться тут: stackoverflow.com/questions/25395299 / ...
Laxmana

1
Ця відповідь є явно неправильною, коли ви створюєте новий WP_Query з деякими аргументами, метод get_posts () внутрішньо викликається відразу, і ви НЕ БУДЕТЕ НАЗВИТИ ЇЇ ПРОТИ! Якщо ви зателефонуєте ще раз, як показано у наведеному вище прикладі, він запустить РІЗНИЙ запит, залежно від аргументів та результатів формує початковий запуск (встановлені внутрішні прапори тощо) та може потенційно повернути інший (менший) набір результатів або взагалі немає результатів. Як запропонували TomJNowell і Laxmana вище, для отримання публікаційних даних слід використовувати $ query-> posts.
ivanhoe

11

Насправді вам не потрібно відмовлятися від використання while()циклу. Той самий об’єкт WP_Post вже зберігається у postвластивості:

        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();

                // now $query->post is WP_Post Object, use:
                // $query->post->ID, $query->post->post_title, etc.

            }

        }

2
ifє зайвим.
Аккумулятор

2
Ні, ifне є зайвим. У такому випадку це так, але у більшості виробничих ситуацій у вас є код, який потрібно виконати між if і time.
magi182

2
@ magi182 У цьому конкретному випадку це є зайвим. Люди повинні навчитися коли це використовувати.
frodeborli

4
@frodeborli. Найприємніше в заявах, які починаються з "людей повинні", - це те, що ти майже завжди можеш замінити "люди не хочуть", а твердження все ще перевіряється як істинне.
magi182

1
@ magi182 Можливо, я міг би зробити сотню приємних, щоб мати кодові рядки для доповнення вищевказаного коду.
frodeborli

-1

ви також можете використовувати get_posts( $args )замість wp_Query(), що надасть вам список публікацій

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.