get_posts()
Получает записи (посты, страницы, вложения) из базы данных по указанным критериям. Можно выбрать любые посты и отсортировать их как угодно.
У этой функции есть предустановленные параметры. Иногда их нужно изменить, чтобы они не мешали. Предустановленные параметры:
-
post_status = publish— WP_Query при неустановленном post_status выбирает по-другому. Приpost_type = attachmentpost_status = inherit. -
post_type = post— если мы указываем вывод таксономии для типа записи отличного от post, то параметр post_type нужно изменить - он по умолчанию равен post. -
numberposts = 5— если мы забудем изменить параметрnumberposts, то долго можем недоумевать почему выводится только 5 записей вместо нужных 20. -
suppress_filters = true— этот параметр отключает работу некоторых фильтров (хуков). Читать подробнее. -
ignore_sticky_posts = true― нельзя изменить! no_found_rows = true― нельзя изменить!
Эта функция - аналог query_posts(). Отличается тем, что она не вмешивается в глобальный запрос WP, а создает отдельный экземпляр класса WP_Query. Подробнее читайте здесь.
Хуков нет.
Возвращает
WP_Post[]|int[].
-
Пустой массив, если не удалось получить записи.
-
Массив WP_Post объектов (записей). Каждый объект в массиве выглядит так:
Шаблон использования
// параметры по умолчанию
$my_posts = get_posts( array(
'numberposts' => 5,
'category' => 0,
'orderby' => 'date',
'order' => 'DESC',
'include' => array(),
'exclude' => array(),
'meta_key' => '',
'meta_value' =>'',
'post_type' => 'post',
'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
) );
global $post;
foreach( $my_posts as $post ){
setup_postdata( $post );
// формат вывода the_title() ...
}
wp_reset_postdata(); // сброс
Использование
get_posts( $args );
- $args(строка/массив)
- Список аргументов, в соответствии с которыми будет получен результат.
По умолчанию: предустановленные
Аргументы параметра $args
Ниже приведен не полный список параметров. Весь список возможных параметров смотрите в WP_Query. Эта функция является оберткой для WP_Query, поэтому может принимать все теже параметры.
- numberposts(число)
- posts_per_page(число)
Количество выводимых постов. Установить на
0, чтобы ограничить вывод максимальным числом постов на страницу (устанавливается в настройках ВП) или поставить-1чтобы убрать ограничения вывода (LIMIT).posts_per_pageимеет больший приоритет чемnumberposts.По умолчанию: 5
- offset(число)
- Отступ от первого поста (записи).
- tax_query(массив)
- Фильтрация по нужным таксономиям. Подробнее читайте здесь.
- category(число/строка/массив)
Укажите ID категории из которой нужно получить посты. Можно указать ID со знаком минус
-3, тогда эта категория будет исключена (будут получены все записи, кроме записей из категории 3). Можно указать несколько ID через запятую в виде строки3,5,12или-3,-5,12).В значении нужно передавать ID, а не название категории.
Смотрите также описание параметра cat у WP_Query.
По умолчанию: 0
- category_name(строка)
- Показывать посты только из этой категории (указывается название или альтернативное имя(slug) категории).
По умолчанию: '' - tag(строка)
- Получить записи имеющие указанные в этом параметре метки. Нужно указывать альтернативное имя (slug) метки. Если указать несколько имен (меток) через запятую, то будут получены записи соответствующие любой метке, а если разделить пробелами, то будут получены записи имеющие все указанные метки.
По умолчанию: '' - include(строка/число/массив)
ID постов, которые нужно получить. Если указывается строка, то ID нужно разделять запятыми или пробелами (смотри wp_parse_id_list). Пример, получит 6 постов: '45,63,78,94,128,140'.
Важно: Указав этот параметр, бессмысленно указывать параметры
posts_per_page,offset,category,exclude,meta_key,meta_valueиpost_parent.
По умолчанию: ''- exclude(строка/число/массив)
- ID постов, которые нужно исключить из выборки. Если указывается строка, то ID нужно разделять запятыми или пробелами (смотри wp_parse_id_list).
По умолчанию: '' - meta_key и meta_value(строка)
Получить посты имеющие указанное произвольное поле (meta_key) со значением (meta_value).
Можно указать meta_key и meta_value, тогда будут получены посты, у которых есть указанное метаполе и значение которого равно указанному значение.
Или можно указать только meta_key, тогда будут получены все записи у которых это метаполе есть и не важно какое там значение.
По умолчанию: ''
- meta_query(массив)
- Выборка записей по произвольным полям. Подробнее см. в описании WP_Query (meta_query).
По умолчанию: [] - date_query(массив)
- Выборка записей по датам. Подробнее см. в описании WP_Query (date_query).
По умолчанию: [] - post_type(строка/массив)
Какого типа посты нужно получать, может быть:
any- все типы, кроме revision и типов у которых указан параметр exclude_from_search=true.-
attachment- прикрепленные записи.по умолчанию WP_Query ставит статус 'post_status'=>'publish', а вложения имеют статус 'post_status'=>'inherit', поэтому чтобы вывести вложения нужно еще изменить параметр post_status на 'inherit' или 'any'.
page- постоянные страницыpost- постыrevision- ревизииcustom_type- название (ярлык) произвольного типа записиarray('post','page')- сразу несколько типов в массиве.
По умолчанию: 'post'
- post_mime_type(строка/массив)
Какого типа вложения нужно получить. Можно использовать, когда параметр post_type = attachment.
- image/jpeg
- image/png
- image/gif
- image - для любых картинок
- audio/mpeg
- application/pdf
- application/zip
Вместо одно миме типа можно указать несколько в массиве. Полный список миме типов смотрите здесь.
По умолчанию: ''
- post_status(строка/массив)
Статус записи. Можно передать несколько статусов через запятую. Может принимать:
publish- опубликованоprivate- личная записьdraft- черновикfuture- запланированоpending- на модерацииinherit- вложение, любое вложение получает этот статус. Ставиться автоматически, при $post_type='attachment'any- все статусы
По умолчанию: publish
- post_parent(число)
- Показать только дочерние записи к указанному ID.
По умолчанию: '' - необрабатывается - nopaging(логический)
- Включить или отключить пагинацию, если стоит
trueпараметр$numberpostsигнорируется.
По умолчанию: false - orderby(строка)
Сортировать результат по указанным полям. Можно указывать несколько полей сортировки, через пробел. Допустимые поля:
author- сортировать по ID авторов.content- сортировать по контенту.date- сортировать по дате создания записи.ID- сортировать по ID записи. Указываются ID в массиве или через запятую.menu_order- сортировать по полюmenu_order. Используется для постоянных страниц и вложений (картинки, файлы и т.п.).mime_type- сортировать по MIME типу. Используется для вложений.modified- сортировать по дате изменения.name- сортировать по альтернативному имени (slug).rand- случайная сортировка. Создает повышенную нагрузку на БД.status- сортировать по статусу (черновик, опубликовано и т.п.)title- сортировать по названию.parent- сортировать по ID родителя (parent ID).password- сортировать по паролю.type- сортировать по типу (пост, страница и т.д. ).comment_count- по количеству комментариев.meta_value- по значению указанного произвольного поля.post__in- учитывает порядок указанных ID в параметре include.
Префикс post_ у полей таблицы опускается для удобства. Например вместо date можно написать post_date, вместо content post_content и т.д.
По умолчанию: 'date'
- order(строка)
- В каком направлении упорядочить, указанное в параметре $orderby, поле:
ASC- по порядку (от меньшего к большему: а,б,в).
DESC- в обратном порядке (от большего к меньшему: в,б,а).
По умолчанию: 'DESC' - suppress_filters(true/false)
При
true(по умолчанию) пропускает все хуки изменения SQL запроса, такого типаposts_*илиcomment_feed_*.Какие именно фильтры отключаются смотрите здесь.
В функциях WP_Query и query_posts() этот параметр отключен по умолчанию (равен false).
suppress_filters = trueне виляет на работу фильтра pre_get_posts.Такое отключение фильтров по умолчанию, может ввести в замешательство, если есть плагины влияющие на вывод записей, через фильтры SQL запроса, например WPML. В таких случаях suppress_filters нужно отключить.
По умолчанию: true
Примеры
#1 Выведем записи из рубрики
Допустим у нас в категориях есть рубрика «Статьи» (ярлык articles) в которую добавляются записи (post_type=post). Нам нужно вывести 6 таких записей на произвольной странице.
<?php
global $post;
$myposts = get_posts( [
'posts_per_page' => 6,
'category_name' => 'articles',
'post_type' => 'post',
] );
foreach( $myposts as $post ){
setup_postdata( $post );
?>
<div class="article-elem">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
<?php
}
wp_reset_postdata();
?> #2 Вывод постов с отступом
Если у вас на главной выводится один, последний пост, а нужно вывести еще 5 предыдущих из категории 1, то можно использовать такой код:
<ul>
<?php
global $post;
$myposts = get_posts( [
'posts_per_page' => 5,
'offset' => 1,
'category' => 1,
] );
foreach( $myposts as $post ){
setup_postdata( $post );
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_postdata();
?>
</ul> #3 Получить все прикрепленные файлы
Используется за пределами Цикла WordPress. Следующий код выведет заголовок, ссылку и цитату прикрепленного файла:
$attachments = get_posts( array(
'post_type' => 'attachment',
'posts_per_page' => 500,
'post_status' => 'any',
'post_parent' => null
) );
if ( $attachments ) {
foreach ( $attachments as $post ) {
setup_postdata( $post );
the_title();
the_attachment_link( $post->ID, false );
the_excerpt();
}
wp_reset_postdata();
} #4 Получите 10 последних записей:
$args = [ 'numberposts' => 10 ]; $latest_posts = get_posts( $args );
Вы также можете передать аргумент post_type, когда нужно получить записи из типа поста, например:
$args = [ 'numberposts' => 10, 'post_type' => 'book' ]; $latest_books = get_posts( $args );
#5 Возможность использовать специальные функции Цикла ВП
Стандартно в цикле основанном на get_posts() невозможно использовать, например, функцию the_content() или the_date(). Эта проблема решается функцией setup_postdata() которой нужно передать переменную $post:
<?php
$lastposts = get_posts( [
'posts_per_page' => 3
] );
foreach( $lastposts as $post ){
setup_postdata($post); // устанавливаем данные
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_content(); ?>
<?php
}
wp_reset_postdata(); // сброс
?>
Данные можно также получить через обращение к свойству объекта (объект->свойство_объекта). Например, для этого примера $post->ID будет равно ID поста, $post->post_content будет содержать контент записи. Свойство объекта это колонка таблицы БД posts. Название колонок можно посмотреть тут.
Не забывайте, что на экран данные выводятся через php оператор echo:
<?php echo $post->ID; ?>
#6 Последние посты отсортированные по заголовку
Получим последние посты отсортированные по заголовку в алфавитном порядке. Следующий пример выведет дату, заголовок и цитату поста:
<?php
global $post;
$postslist = get_posts( [
'posts_per_page' => 10,
'order'=> 'ASC',
'orderby' => 'title'
] );
foreach( $postslist as $post ){
setup_postdata($post);
?>
<div>
<?php the_date(); ?>
<br />
<?php the_title(); ?>
<?php the_excerpt(); ?>
</div>
<?php
}
wp_reset_postdata(); #7 Случайные посты
Получим 5 случайных постов, реализуется за счет параметра 'orderby' => 'rand':
<ul> <?php $args = array( 'posts_per_page' => 5, 'orderby' => 'rand' ); $rand_posts = get_posts( $args ); foreach( $rand_posts as $post ) : ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> <?php wp_reset_postdata() ?> </ul>
#8 Прикрепленные файлы определенного поста
Код нужно использовать внутри Цикла WordPress, где переменная $post->ID:
<?php
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => null,
'post_parent' => $post->ID
);
$attachments = get_posts( $args );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
echo apply_filters( 'the_title' , $attachment->post_title );
the_attachment_link( $attachment->ID , false );
}
}
wp_reset_postdata();
?> #9 Последние записи из той же рубрики
Выведем список последних записей текущей рубрики, в которой находится запись. При этом исключим текущую запись:
<?php
$category = get_the_category();
rsort( $category );
$cat_add_id = $category[0]->term_id;
$posts = get_posts( array(
'cat' => $cat_add_id,
'posts_per_page' => 4,
'exclude' => $GLOBALS['post']->ID,
) );
foreach( $posts as $post ){
setup_postdata($post);
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
}
wp_reset_postdata();
?>
#10 Параметры таксономии
Покажем посты, связанные с определенной таксономией. Если вы указываете таксономию, зарегистрированную для типа поста, то вместо category можно использовать {имя_таксономии}. Например, если у вас есть таксономия genre'' и вы хотите показывать только посты из жанраjazz'', вы можете использовать следующий код.
$show_albums = get_posts( [ 'posts_per_page' => 8, 'orderby' => 'rand', 'post_type' => 'albums', 'genre' => 'jazz', 'post_status' => 'publish' ] );
Следующий пример отображает сообщения, помеченные jazz, в таксономии genre, используя tax_query:
$args = array( 'tax_query' => array( array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => 'jazz' ) ) ); $postslist = get_posts( $args );
Дополнительные примеры см. в разделе "Параметры таксономии" документации WP_Query.
#11 Сортировка по порядку из параметра include
orderby также принимает значение post__in. Если использовать include для получения определенных постов, то посты будут получены в том порядке, который вы указали для include. Например:
$posts = get_posts( [ 'include' => '3,8,1,17', 'post_type' => 'attachment', 'orderby' => 'post__in', ] );
#12 Массив ID постов
Чтобы вернуть идентификаторы вместо объектов post, используйте аргумент fields.
$args = [ 'fields' => 'ids' ]; $posts = get_posts( $args ); // if any posts are found $posts will be an array with their ids
Аргумент fields может быть установлен в ids, all (по умолчанию) или id=>parent. Последние два (аргумента) возвращают массив объектов stdClass.
#13 Параметры произвольного поля
Показать посты, связанные с определенным кастомным полем. Следующий пример отображает посты из типа постов product, которые имеют мета-ключ featured со значением yes, используя meta_query:
$args = [ 'post_type' => 'product', 'meta_query' => [ [ 'key' => 'featured', 'value' => 'yes', ] ], ]; $postslist = get_posts( $args );
Дополнительные примеры см. в разделе "Параметры пользовательских полей" документации WP_Query.
Заметки
-
С версии 2.6 изменен ряд передаваемых значений у параметра orderby - префикс
post_был удален, например, было post_title, стало просто title. - С версии 3.0 параметрам include и exclude можно передавать и массивы ID.
—
Хотите дешево купить просмотры в Инстаграме на видео или ТВ-трансляцию, но не знаете, где? Попробуйте посетить сайт Doctor SMM, где Вам будет предложена одна из самых низких цен по рунету на просмотры. Торопитесь, так как предложение действует ограниченное время! К тому же здесь Вы сможете очень быстро приобрести ресурс с оптимальным, конкретно для Вашей страницы, скоростным режимом. Развивайте аккаунт быстро и легко!
Заметки
- Смотрите: WP_Query
- Смотрите: WP_Query::parse_query()
Список изменений
| С версии 1.2.0 | Введена. |