get_posts()
Получает записи (посты, страницы, вложения) из базы данных по указанным критериям. Можно выбрать любые посты и отсортировать их как угодно.
У этой функции есть предустановленные параметры. Иногда их нужно изменить, чтобы они не мешали. Предустановленные параметры:
-
post_status = publish
— 'inherit', если post_type = attachment. WP_Query при неустановленом post_status выбирает подругому. -
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(число)
- Отступ от первого поста (записи).
- 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 нужно разделять запятыми или пробелами. Пример, получит 6 постов: '45,63,78,94,128,140'.
Важно: Указав этот параметр, бессмысленно указывать параметры
posts_per_page
,offset
,category
,exclude
,meta_key
,meta_value
иpost_parent
.
По умолчанию: ''- exclude(строка/число)
- ID постов которые нужно исключить из выборки, указывать через запятую или пробел.
По умолчанию: '' - 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 Возможность использовать специальные функции Цикла ВП
Стандартно в цикле основанном на 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; ?>
#5 Последние посты отсортированные по заголовку
Получим последние посты отсортированные по заголовку в алфавитном порядке. Следующий пример выведет дату, заголовок и цитату поста:
<?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();
#6 Случайные посты
Получим 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>
#7 Прикрепленные файлы определенного поста
Код нужно использовать внутри Цикла 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(); ?>
#8 Последние записи из той же рубрики
Выведем список последних записей текущей рубрики, в которой находится запись. При этом исключим текущую запись:
<?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(); ?>
#9 Параметры таксономии
Покажем посты, связанные с определенной таксономией. Если вы указываете таксономию, зарегистрированную для типа поста, то вместо 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.
#10 Сортировка по порядку из параметра include
orderby
также принимает значение post__in
. Если использовать include
для получения определенных постов, то посты будут получены в том порядке, который вы указали для include. Например:
$posts = get_posts( [ 'include' => '3,8,1,17', 'post_type' => 'attachment', 'orderby' => 'post__in', ] );
#11 Получите 10 последних записей:
$args = [ 'numberposts' => 10 ]; $latest_posts = get_posts( $args );
Вы также можете передать аргумент post_type, когда нужно получить записи из типа поста, например:
$args = [ 'numberposts' => 10, 'post_type' => 'book' ]; $latest_books = get_posts( $args );
#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 | Введена. |