Многие плагины WordPress извлекают сообщения из базы данных, настраивая порядок сортировки, извлекая сообщения на основе определенного мета-ключа или таксономии. Вы когда-нибудь задумывались, как эти плагины получают настраиваемые списки постов без написания SQL-запросов? В этом уроке мы научимся делать именно это.
В этой статье мы рассмотрим get_posts()
с некоторыми примерами ее использования в ваших собственных проектах. Мы также рассмотрим некоторые типичные случаи использования этой функции и ее отличие от объекта get_pages
функции get_pages
.
Что такое get_posts()
?
Функция get_posts
была доступна в ядре WordPress начиная с WordPress 1.2.0. Эта функция в основном используется для извлечения сообщений из базы данных путем применения пользовательских фильтров и сортировки окончательного результата на основе набора параметров.
Функция get_posts()
возвращает массив объектов WP_Post
. Каждый объект WP_Post
представляет отдельный пост.
Внутренне get_posts
использует объект WP_Query
для построения и выполнения SQL-запросов на основе переданного набора параметров.
Примечание. Сообщения означают сообщение, страницу и пользовательский тип сообщения.
Почему бы не использовать объект WP_Query
напрямую?
Плагины используют функцию get_posts
вместо объекта WP_Query
поскольку использование объекта WP_Query
напрямую изменяет основной цикл (т. $wp_query
переменную $wp_query
), что может вызвать проблемы с сайтом.
В чем разница между get_posts()
и get_pages()
?
Оба они используются для извлечения сообщений из базы данных WordPress, однако вот некоторые различия между ними:
- Некоторые имена и значения параметров различаются между собой. Хотя они ведут себя одинаково независимо от названий параметров.
- Функция
get_pages()
настоящее время не получает сообщения наmeta_value
параметровmeta_key
иmeta_value
. - Функция
get_pages()
не использует объектWP_Query
. Вместо этого он создает и выполняет запросы SQL напрямую.
get_posts()
Параметры функции
Функция get_posts
принимает только один аргумент в виде массива. Массив содержит различные параметры для применения пользовательских фильтров и сортировки результатов.
Вот пример кода, который показывает, как вызвать эту функцию и различные доступные параметры:
<?php $args = array( "posts_per_page" => 5, "paged" => 1 "tax_query" => array( array( "taxonomy" => "category", "field" => "slug", "terms" => "videos,movies", ) ), "orderby" => "post_date", "order" => "DESC", "exclude" => "1123, 4456", "meta_key" => "", "meta_value" => "", "post_type" => "post", "post_status" => "publish" ); $posts_array = get_posts($args); ?>
Доступно больше параметров, но это наиболее часто используемые. Давайте посмотрим на каждый из этих параметров:
- posts_per_page : этот параметр определяет количество постов для возврата. Используйте -1, если вы хотите все сообщения.
- paged : позволяет нам перемещаться между наборами постов при использовании параметра
posts_per_page
. Используется для нумерации страниц. Например: предположим, чтоposts_per_page
равен 10 и в результате 20 сообщений, а затем, если вы назначитеpaged
для 2, будут возвращены последние 10 сообщений - tax_query : отображать сообщения определенного пула таксономии, т. е. фильтровать сообщения другого пула таксономии.
terms
могут принимать разделенную запятыми строку, представляющую несколькоterms
таксономии - orderby : используется для сортировки полученных сообщений. Некоторые возможные значения: «none», «date», «rand», «comment_count», «meta_value», «meta_value_num» и т. Д. При сортировке с использованием «meta_value» и «meta_value_num» необходимо
meta_key
параметрmeta_key
. - order : обозначает восходящий или нисходящий порядок параметра
orderby
. Возможные значения: «DESC» или «ASC». - исключить : принимает разделенный запятыми список идентификаторов сообщений, которые будут исключены из поиска в базе данных.
- meta_key и meta_value : если вы
meta_key
толькоmeta_key
, будут возвращаться сообщения с ключом. Если вы также предоставитеmeta_value
тогда будутmeta_value
сообщения, соответствующиеmeta_value
дляmeta_key
. - post_type : извлекает контент на основе поста, страницы или пользовательского типа поста. Помните, что по умолчанию
post_type
установлен только для отображения сообщений, но не страниц. - post_status : получает сообщения по статусу сообщения. Возможные значения: «опубликовать», «в ожидании», «черновик», «будущее», «любой» или «мусор».
Объект WP_Post
Функция get_posts
возвращает массив, содержащий объекты WP_Post
. Вот важные свойства объекта WP_Post
:
- ID : ID сообщения
- post_author : имя автора сообщения
- post_type : тип сообщения
- post_title : название поста
- post_date : дата публикации сообщения. Формат: 0000-00-00 00:00:00
- post_content : содержание сообщения.
- post_status : статус сообщения
- comment_count : Количество комментариев к записи
Примеры get_posts
Давайте посмотрим на некоторые примеры, используя функцию get_posts
.
Самые популярные сообщения
Если вы хотите отобразить n самых популярных сообщений на вашем сайте, вы можете использовать get_posts
для их получения. Вот пример:
<?php $args = array("posts_per_page" => 10, "orderby" => "comment_count"); $posts_array = get_posts($args); foreach($posts_array as $post) { echo "<h1>" . $post->post_title . "</h1><br>"; echo "<p>" . $post->post_content . "</p><br>"; } ?>
Здесь мы используем параметр orderby
для сортировки постов по количеству комментариев, получая топ-10 постов.
Случайные сообщения
Вы также можете легко получить случайные сообщения. Это полезно, чтобы порекомендовать пользователям другую статью на вашем сайте, когда они закончат читать текущую. Вот код для этого:
<?php $args = array("posts_per_page" => 1, "orderby" => "rand"); $posts_array = get_posts($args); foreach($posts_array as $post) { echo "<h1>" . $post->post_title . "</h1><br>"; echo "<p>" . $post->post_content . "</p><br>"; } ?>
В приведенном выше примере мы передали значение rand
параметру order_by
.
Сообщения с мета-ключом и значением
Возможно, мы захотим получить все сообщения, которые имеют определенный мета-ключ и назначенное значение. Например: в некоторых блогах есть рецензент для каждой статьи. Возможно, мы захотим получить статьи, проверенные конкретным рецензентом.
Вот код для этого:
<?php $args = array("posts_per_page" => -1, "meta_key" => "reviewer", "meta_value" = "narayanprusty"); $posts_array = get_posts($args); foreach($posts_array as $post) { echo "<h1>" . $post->post_title . "</h1><br>"; echo "<p>" . $post->post_content . "</p><br>"; } ?>
Здесь мы извлекаем все сообщения, рассмотренные «narayanprusty». Мы предполагаем, что имя рецензента сохраняется через мета-ключ «рецензент» для каждого поста.
Пользовательский тип сообщения с пользовательской таксономией
Мы можем захотеть получить сообщения с пользовательским типом сообщения с пользовательским именем таксономии. Рассмотрим этот пример кода:
<?php $args = array("posts_per_page" => -1, "post_type" => "coupons", "tax_query" => array( array( "taxonomy" => "coupon_category", "field" => "slug", "terms" => "plugins,themes", ) )); $posts_array = get_posts($args); foreach($posts_array as $post) { echo "<h1>" . $post->post_title . "</h1><br>"; echo "<p>" . $post->post_content . "</p><br>"; } ?>
В этом примере мы извлекаем сообщения с пользовательским типом сообщений, называемыми «купонами», которые принадлежат пользовательским таксономиям «плагинов» и «тем».
Вывод
В этой статье мы увидели, как get_posts
функция get_posts
, различные параметры, которые она поддерживает, просматривая возвращаемый результат и некоторые примеры использования. Функция get_posts
является одной из наиболее часто используемых функций WordPress, я надеюсь, что теперь вы можете начать использовать ее в своих собственных проектах.