Функция get posts для WordPress
Многие плагины WordPress получают списки постов из базы данных с индивидуальным порядком сортировки, извлекая их на основе какого-то meta ключа или таксономии. Вы когда-нибудь задавались вопросом, как эти плагины получают такие списки записей без выполнения каких-либо SQL запросов? Чтобы разобраться в этом, мы исследуем функцию get posts, а также рассмотрим некоторые типичные случаи ее использования.
Содержание
Что это за функция
Функция get posts стала доступна в ядре WordPress еще с версии 1.2.0.
Она предназначена для того, чтобы извлекать списки постов из базы данных, применяя на них пользовательские фильтры для сортировки конечного результата.
По своей сути, эта функция подобна классу wp query, поскольку также возвращает объекты wp post из базы данных. Более того, внутри она использует все тот же класс wp query для построения и исполнения SQL запросов. Однако, в ней задаются несколько другие аргументы, о которых более подробно можно узнать из кодекса WordPress.
Как работает эта функция
Механика работы get posts достаточно проста. Сперва, вы задаете массив аргументов, по которым будет извлечено заданное количество записей из базы данных и их сортировка. При этом, можно отсортировать их по множеству параметров, таких как ID, заголовок, дата публикации, значение meta ключа и т.д. После чего, вы разбираете этот массив на отдельные объекты wp post (иными словами, отдельные записи) и задаете определенные свойства, которые будут отображаться в шаблоне WordPress.
Почему бы не использовать wp_query напрямую
В плагинах рекомендуется применение именно get posts, а не класса wp query, для получения объектов wp post. Так сделано потому, что этот класс изменяет основной цикл, который по умолчанию используется для отображения записей в WordPress. Из-за этого, он может вызвать некоторые проблемы в работе сайта. Кроме того, использование wp query может значительно увеличить время загрузки страницы, так как сценарий будет выполнять в 2 раза больше работы.
Примеры использования функции
Чтобы лучше понять механику работы get posts, давайте рассмотрим некоторые примеры ее использования, такие как:
- Отображение последних статей по ID;
- Отображение статей в случайном порядке;
- Отображение статей с определенным произвольным полем.
Эти примеры могут пригодиться вам в собственных проектах, но имейте ввиду, что область применения этой функции не ограничивается только данными способами, она позволяет сделать гораздо больше.
Последние записи
Если вы хотите отобразить определенное число последних постов, находящихся на вашем сайте, то вы можете использовать эту функцию для извлечения объектов wp post и сортировке по ID. Вот пример:
<?php
$args = array ("posts_per_page" => 10, "order" => "DESC", "orderby" => "ID");
$lastarticles = get_posts ($args);
foreach ($lastarticles as $article)
{
echo "<h1>" . $article - > post_title . "</h1><br>";
echo "<p>" . $article - > post_content . "</p><br>";
}
?>
Здесь используется параметр «OrderBy» для сортировки сообщений по убыванию значения их ID (идентификатора). Таким образом, вы получаете 10 самых последних записей, так как каждый новый пост сохраняется в БД под следующим по счету ID.
Случайные записи
Вы также можете легко получить случайные посты. Это полезно, когда вы хотите порекомендовать пользователям другие статьи, находящиеся на вашем сайте, после того, как они закончат прочтение текущей статьи. Вот так будет выглядеть код:
<?php
$args = array ("posts_per_page" => 1, "orderby" => "rand");
$randarticles = get_posts ($args);
foreach ($randarticles as $article)
{
echo "<h1>" . $article -> post_title . "</h1><br>";
echo "<p>" . $article -> post_content . "</p><br>";
}
?>
В данном примере, параметру «OrderBy» передается значение «rand», что означает случайную сортировку объектов wp post.
Записи с определенным значением произвольного поля
Бывают ситуации, в которых нужно получить все посты, имеющие определенный meta ключ с конкретным значением. Например, на некоторых блогах используется имя ревьювера для каждого обзора. Используя следующий код, можно получить объекты wp post, в которых имеется заданный meta ключ:
<?php
$args = array ("posts_per_page" => - 1, "meta_key" => "reviewer", "meta_value" => "victordark");
$metaarticles = get_posts ($args);
foreach ($metaarticles as $article)
{
echo "<h1>" . $article -> post_title . "</h1><br>";
echo "<p>" . $article -> post_content . "</p><br>";
}
?>
Здесь извлекаются все посты ревьювера «victordark». Обратите внимание, что имя ревьювера для каждого поста должно быть сохранено с помощью meta ключа «reviewer». Но вы можете использовать любое другое название для сохранения meta ключа, а потом извлекать его по этому названию.
Заключение
Функция get posts является наиболее часто используемой в WordPress, потому что имеет огромное количество возможностей. Практически каждый плагин так или иначе применяет ее в своей работе. Если вы разрабатываете свой плагин или тему, или просто хотите вывести определенные записи в каком-то месте своего сайта, то вам не обойтись без нее.