get_posts() WP 1.2.0

Отримує записи (пости, сторінки, вкладення) із бази даних за вказаними критеріями. Можна вибрати будь-які пости та відсортувати їх як завгодно.

Ця функція має попередньо встановлені параметри . Іноді їх потрібно змінити, щоб вони не заважали. Попередньо встановлені параметри:

  • post_type = post– Якщо ми вказуємо висновок таксономії для типу запису відмінного від post, то параметр post_type потрібно змінити – він за умовчанням дорівнює post .

  • numberposts = 5— якщо ми забудемо змінити параметр numberposts, то довго можемо дивуватися, чому виводиться лише 5 записів замість потрібних 20.

  • Читати докладніше .

  • ignore_sticky_posts = true― не можна змінити!

  • no_found_rows = true― не можна змінити!

Ця функція – аналог читайте тут .

Працює на основі:
WP_Query() ,
WP_Query::query()
1 раз – 0.0036 сек
(дуже повільно) | 50000 разів – 99.1 сек
(дуже повільно)

Хуків немає.

Повертає

WP_Post[]|int[].

  • Порожній масив, якщо не вдалося отримати запис .

  • Масив WP_Post об’єктів (записів). Кожен об’єкт у масиві виглядає так:

    array(
    	[0]=> object(WP_Post)#4692 (24) {
    		["ID"] => int(822)
    		["post_author"] => string(1) "1"
    		["post_date"] => string(19) "2016-07-07 10:28:57"
    		["post_date_gmt"] => string(19) "2016-07-07 07:28:57"
    		["post_content"] => string(6225) "Контент статті"
    		["post_title"] => string(37) "Мертве море (14 фото)"
    		["post_excerpt"] => string(15) "Цитата про статтю"
    		["post_status"] => string(7) "publish"
    		["comment_status"] => string(4) "open"
    		["ping_status"] => string(4) "open"
    		["post_password"] => string(0) ""
    		["post_name"] => string(95) "mertvoe-more-14-foto"
    		["to_ping"] => string(0) ""
    		["pinged"] => string(0) ""
    		["post_modified"] => string(19) "2016-07-07 10:28:57"
    		["post_modified_gmt"] => string(19) "2016-07-07 07:28:57"
    		["post_content_filtered"] => string(0) ""
    		["post_parent"] => int(0)
    		["guid"] => string(0) ""
    		["menu_order"] => int(0)
    		["post_type"] => string(4) "post"
    		["post_mime_type"] => string(0) ""
    		["comment_count"] => string(1) "0"
    		["filter"] => string(3) "raw"
    	}
    	[1] => object(WP_Post){
    		...
    	}
    	[2] => object(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 , тому вона може приймати такі ж параметри.


numberposts
(число)

posts_per_page
(число)
Кількість постів, що виводяться. Встановити на
0, щоб обмежити виведення максимальним числом постів на сторінку (встановлюється в налаштуваннях ВП) або поставити
-1щоб усунути обмеження виводу (LIMIT).


За замовчуванням: 5

offset
(число)
Відступ від першого посту (запису).

category
(число/рядок/масив)

Вкажіть ID категорії, з якої потрібно отримати пости. Можна вказати ID зі знаком мінус -3, тоді ця категорія буде виключена (будуть отримані всі записи, крім записів із категорії 3). Можна вказати кілька ID через кому у вигляді рядка 3,5,12або -3,-5,12).

У значенні потрібно передавати ID, а не назву категорії.

Дивіться також опис параметра cat у WP_Query .

За замовчуванням: 0


category_name
(рядок)
Показувати пости тільки з цієї категорії (вказується назва або альтернативне ім’я категорії).


За замовчуванням: ”

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.


За замовчуванням: 0

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

Приклади

3

#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();
?>
1

#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>
0

#3 Можливість використання спеціальних функцій Цикл ВП

Стандартно в циклі заснованому на 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; ?>
0

#4 Останні посади відсортовані за заголовком

Отримаємо останні посади відсортовані за заголовком в алфавітному порядку. Наступний приклад виведе дату, заголовок та цитату посту:

<?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();
0

#5 Випадкові посади

Отримаємо 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>
0

#6 Отримати всі прикріплені файли

Використовується за межами циклу 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();
}
0

#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();
?>
0

#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();
?>

Інша версія цього коду в коментарях .

0

#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 .

0

#10 Сортування по порядку з параметраinclude

orderbyтакож набуває значення post__in. Якщо використовувати includeдля отримання певних постів, то пости будуть отримані в порядку, який ви вказали для include. Наприклад:

$posts = get_posts([
	'include' => '3,8,1,17',
	'post_type' => 'attachment',
	'orderby' => 'post__in',
]);
0

#11 Отримайте останні 10 записів:

$args = [
	'numberposts' => 10
];

$latest_posts = get_posts($args);

Ви також можете передати аргумент post_type, коли потрібно отримати записи з типу посту, наприклад:

$args = [
  'numberposts' => 10,
  'post_type' => 'book'
];

$latest_books = get_posts($args);
0

#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.

0

#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 , де Вам буде запропонована одна з найнижчих цін по рунета на перегляди. Поспішайте, тому що пропозиція діє обмежений час! До того ж, тут Ви зможете дуже швидко придбати ресурс з оптимальним, конкретно для Вашої сторінки, швидкісним режимом. Розвивайте обліковий запис швидко і легко!

нотатки

список змін

З версії 1.2.0Введено.

Код get_posts() WP 6.0.2

function get_posts( $args = null ) {
	$defaults = array(
		'numberposts' => 5,
		'category' => 0,
		'orderby' => 'date',
		'order' => 'DESC',
		'include' => array(),
		'exclude' => array(),
		'meta_key' => '',
		'meta_value' => '',
		'post_type' => 'post',
		'suppress_filters' => true,
	);

	$parsed_args = wp_parse_args($args, $defaults);
	if ( empty( $parsed_args['post_status'] ) ) {
		$parsed_args['post_status'] = ( 'attachment' === $parsed_args['post_type'] ) ? 'inherit': 'publish';
	}
	if ( ! empty( $parsed_args['numberposts'] ) && empty( $parsed_args['posts_per_page'] ) ) {
		$parsed_args['posts_per_page'] = $parsed_args['numberposts'];
	}
	if ( ! empty( $parsed_args['category'] ) ) {
		$parsed_args['cat'] = $parsed_args['category'];
	}
	if ( ! empty( $parsed_args['include'] ) ) {
		$incposts = wp_parse_id_list( $parsed_args['include'] );
		$parsed_args['posts_per_page'] = count( $incposts ); // Тільки номери повідомлень включаються.
		$parsed_args['post__in'] = $incposts;
	} elseif ( ! empty( $parsed_args['exclude'] ) ) {
		$parsed_args['post__not_in'] = wp_parse_id_list( $parsed_args['exclude'] );
	}

	$parsed_args['ignore_sticky_posts'] = true;
	$parsed_args['no_found_rows'] = true;

	$get_posts = новий WP_Query;
	return $get_posts->query( $parsed_args );

}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *