WP_Query{} WP 1.5.0

Вибирає записи з бази даних за вказаними критеріями. На основі WP_Query працюють функції query_posts() і решта запитів пов’язані з вибором записів з таблиці wp_posts.

Основа для:
query_posts() ,
get_posts()

Хуки із класу


Знайомство з WP_Query

WP_Query – це PHP клас, який дозволяє отримувати пости з бази даних за різними критеріями. Наприклад, ми можемо отримати посади:

  • за певний проміжок часу;
  • із зазначеної категорії, мітки;
  • свіжі пости, довільні пости, популярні пости;
  • пости із зазначеними довільними полями або набором таких полів.

Розглянемо простий запит:

$query = new WP_Query( [ 'category_name' => 'news' ] );

Так WordPress зробить запит до бази даних, щоб отримати записи з категорії “news”.

Тепер змінна $query містить об’єкт з результатами запиту. Опрацюємо результат за допомогою спеціальних методів:

while ( $query->have_posts() ) {
	$query->the_post();

	the_title(); // Виведемо заголовок посту
}

За допомогою have_posts() ми перевіряємо, чи є записи для виведення в об’єкті $query . the_post() готує поточний запис до висновку, роблячи доступними звичні функції the_title() , the_content() та інші.

WP_Query використовується в WordPress завжди. Наприклад, під час створення будь-якої сторінки WP_Query створює глобальну змінну $wp_query де зберігається інформація про поточний запит. На основі цієї інформації WP визначає, на якій сторінці ми зараз знаходимося (пост, архів, мітка тощо).

Також при побудові базового циклу WordPress дані беруться зі змінної $wp_query і виводяться на екран через допоміжні функції: the_permalink() , the_content() .

Також $wp_query зберігає й інші дані. На різних типах сторінок дані різні. Подивитися які дані знаходяться в змінній $wp_query можна так:

global $wp_query;
print_r($wp_query);

Часто ви отримуєте інформацію не працюючи безпосередньо з цим класом та глобальними змінними. Це відбувається завдяки набору функцій: умовні теги, теги шаблону, які стосуються виведення даних усередині Цикл та ряду інших функцій.

Багато умовні теги звертаються до цього класу. Також при створенні циклу if( have_posts() )...всі пов’язані з виведенням даних функції працюють з цим класом. Таким чином, жодна генерація базової сторінки WP не проходить без використання WP_Query .

Якщо циклі використовується the_post() , то обов’язково після циклу потрібно викликати функцію wp_reset_postdata() .

Код циклу може виглядати наступним чином (це теж що get_posts() , тільки без встановлених параметрів):

// створюємо екземпляр
$my_posts = новий WP_Query;

// робимо запит
$myposts = $my_posts->query( array(
	'post_type' => 'page'
)));

// обробляємо результат
foreach( $myposts as $pst ){
	echo esc_html($pst->post_title);
}

Для кращого розуміння та візуального сприйняття роботи функцій запиту вивчіть картинку:

Як працюють функції запитів у WordPress

Якщо не передати жодних параметрів, то запиту не відбудеться і буде просто створено об’єкт WP_Query:

$query = New WP_Query(); // створюємо порожній об'єкт, який заповнюватимемо окремо
$query->posts = $posts; // $posts містить дані таблиці wp_posts, отримані іншим способом.
$query->post_count = count($posts); // Заповнюємо нашими постами
$query->found_posts = count($posts); // можна змінити для пагінації

Приклади


2

#1 Стандартний цикл

// задаємо потрібні нам критерії вибірки даних із БД
$ args = array (
	'posts_per_page' => 5,
	'orderby' => 'comment_count'
);

$query = new WP_Query( $args );

// Цикл
if ( $query->have_posts() ) {
	while ( $query->have_posts() ) {
		$query->the_post();
		?>
		<li><?php the_title() ?></li>
		<?php
	}
}
else {
	// Постів не знайдено
}

// Повертаємо оригінальні дані посту. Скидаємо $post.
wp_reset_postdata();

0

#2 Множинний цикл

// Запит до БД
$query = new WP_Query( $args );

// Цикл
while ( $query->have_posts() ) {
	$query->the_post();
	echo '<li>'. get_the_title(). '</li>';
}

/*
Відновлюємо оригінальні дані.
Ми використовуємо new WP_Query, а значить ми не впливаємо на глобальну
змінну `$wp_query`, тому немає необхідності скидати запит і
можна скинути лише дані посту.
*/
wp_reset_postdata();

// Другий запит (без глобальної змінної)
$query2 = new WP_Query( $args2 );

// 2-й цикл
while( $query2->have_posts() ) {
	$query2->next_post();
	echo '<li>'. get_the_title( $query2->post->ID ) . '</li>';
}

// Відновлюємо оригінальні дані посту
wp_reset_postdata();

0

#3 Аналог get_posts()

$ args = array (
	'post_type' => 'page'
);
$query = новий WP_Query;
$my_posts = $query->query($args);

foreach( $my_posts as $my_post ){
	echo '<p>'. $my_post->post_title .'</p>';
}

При створенні запитів WP_Query може отримувати встановлені параметри, які потрібно враховувати. Наприклад, запит $query = new WP_Query( 'post_type=func' );може повернути лише перші 10 записів типу func, а не всі, як очікується. Тому що встановлений параметр posts_per_page=10 обмежує кількість отриманих записів до 10. Ось список параметрів, які можуть бути встановлені і які можуть заважати вашому запиту: post_type , posts_per_page , orderby , order , post_status , offset .

Список усіх можливих параметрів дивіться нижче, а також код коду методу WP_Query::parse_query() .


-1

#4 Стандартний цикл (Альтернатива)

<?php
// Запит
$query = new WP_Query( $args ); ?>

<?php if ( $query->have_posts() ) : ?>

	<!-- пагінація -->

	<!-- цикл -->
	<?php while ( $query->have_posts() ) : $query->the_post(); ?>
		<h2><?php the_title(); ?></h2>
	<?php endwhile; ?>
	<!-- кінець циклу -->

	<!-- пагінація -->

	<?php wp_reset_postdata(); ?>

<?php else : ?>
	<p><?php esc_html_e( 'Немає постів за вашими критеріями.'); ?></p>
<?php endif; ?>



Параметри Категорій (рубрик)

Отримує пости, що належать до певних категорій.

cat
(число/рядок/масив)
ID категорії. Можна вказати кілька ID у рядку через кому або в масиві. Щоб виключити рубрики, вкажіть мінус (-) перед ID категорії – це виключить і всі вкладені рубрики. Щоб не виключити вкладені, натисніть
category__not_in.
category_name
(рядок)
Назва категорії. Використовуйте слаг (альтернативне ім’я), а не саму назву категорії.
category__and
(масив)
Отримати посади, які входять одночасно в кілька категорій.
category__in
(масив)
Отримати посади, що входять до однієї із зазначених категорій.
category__not_in
(масив)
Отримати посади, які не входять до цієї категорії.

Цей параметр не враховує вкладених рубрик. Щоб виключити рубрику та вкладені рубрики, вкажіть ID рубрик через кому зі знаком мінус у параметрі cat: cat=-25,-32.

Пости з однієї категорії

Виведення постів з однієї категорії (записи з дочірніх категорій також будуть обрані):

$query = New WP_Query('cat=4');

Виведення постів з однієї категорії за ярликом (альтернативною назвою категорії):

$query = new WP_Query('category_name=staff');

Виведемо пости лише з категорії 4 (дочірні категорії не торкаються):

$query = new WP_Query( 'category__in=4' );

Пости з кількох категорій

Виведення постів із категорій за ID категорій:

$query = new WP_Query('cat=2,6,17,38');

Виведемо пости з категорій за складом категорій:

$query = new WP_Query( 'category_name=staff,news' );

Виключимо пости, що належать категоріям

Виведемо всі пости, крім постів із категорій 12,34,56:

$query = new WP_Query( 'cat=-12,-34,-56');

Показати всі пости, крім тих, що належать категорії 3:

$query = new WP_Query('cat=-3');

Пости з кількох категорій одночасно

Показати пости, які знаходяться одразу у двох категоріях:

$query = new WP_Query( array( 'category__and' => array(2,6) ) );

Показати пости, які знаходяться хоча б в одній із категорій (дочірні категорії не враховуватимуться):

$query = new WP_Query(array('category__in' => array(2,6)));

Можна виключити кілька категорій, таким чином:

$query = new WP_Query( array('category__not_in' => array(2,6)) );



Параметри Міток

Отримує пости, що відносяться до певних міток.

tag
(рядок)
slug етикетці.
tag_id
(число)
ID етикетці.
tag__and
(масив)
Пости одночасно з кількох міток. Потрібно вказувати ID.
tag__in
(масив)
Пости хоча б однієї зазначеної мітки. Потрібно вказувати ID.
tag__not_in
(масив)
Пости, що не належать до зазначених міток. Потрібно вказувати ID.
tag_slug__and
(масив)
Теж як і
tag__and, тільки вказуються альт. назви (slug) міток.
tag_slug__in
(масив)
теж що і
tag__inтільки вказуються альт. назви міток.

Пости з однією міткою

Отримати посади з міткою. Вказувати потрібно альтернативну назву мітки (склад).

$query = new WP_Query('tag=cooking');

Отримати пости, що мають хоча б одну вказану мітку:

$query = new WP_Query('tag=bread,baking');

Пости з кількома мітками

Отримати пости, що мають будь-яку з міток:

$query = new WP_Query( 'tag=bread,baking' );

Отримати пости, що мають відразу всі вказані мітки:

$query = new WP_Query('tag=bread+baking+recipe');

Отримати пости, що мають відразу дві мітки (37 та 47). Цей варіант більш кращий вищенаведеному через швидкодію.

$query = new WP_Query( array('tag__and' => array(37,47)) );

Отримати пости, що мають хоча б одну мітку 37 або 47. Цей варіант краще т.к. вказуються одразу ID.

$query = new WP_Query( array('tag__in' => array(37,47)) );

Отримати посади, НЕ пов’язані з мітками 37 або 47:

$query = new WP_Query(array( 'tag__not_in'=>array(37,47) ));



Параметри Таксономій

Виводить посади пов’язані з певною таксономією. Див. WP_Tax_Query .

{tax}
(рядок) (застарілий з версії 3.1)
Ім’я таксономії та ярлик терміна:
array( 'category'=>'wordpress' ).
tax_query
(масив)
Параметри запиту для таксономії. WP_Tax_Query ::__construct() . Може приймати наступний ряд вкладених аргументів:

  • relation (рядок)
    Як вибирати записи із зазначених таксономій. Може бути:

    • AND– записи, які одночасно входять у зазначені терміни таксономії.
    • OR– записи що належать будь-якому із зазначених термінів таксономії.

    Типово: AND

    Вказується у першому масиві, а терміни у вкладених масивах, які можуть мати такі параметри:

    • taxonomy (рядок)
      Назва таксономії.
    • field (рядок)
      Поле, яке буде вказувати в параметрі terms . Може бути:

      • idабо term_id– у terms вказуємо id термінів.
      • name– У terms вказуємо заголовок терміна.
      • slug– у terms вказуємо ярлик терміна.За замовчуванням: ‘term_id’
    • terms (число/рядок/масив)
      Терміни таксономії, з яких потрібно вивести записи.
    • operator (рядок)
      Оператор, що вказує як порівнювати зазначені терміни параметрі terms. Може бути:

      • IN– записи із зазначених термінів (за замовчуванням).
      • NOT IN– записи зі всіх термінів, крім зазначених.
      • AND– записи, що одночасно належать всім зазначеним термінам.
      • EXISTS– Записи з таксономії (у яких є будь-який термін таксономії). І тут параметр terms вказувати зайве. З версії 4.1.
      • NOT EXISTS– Записи НЕ з таксономії (у яких немає жодного терміну таксономії). І тут параметр terms вказувати зайве. З версії 4.1.Типово: ‘IN’
    • include_children (логічний)
      Включати чи ні пости з дочірніх термінів (для деревоподібних таксономій). true – увімкнути.
      Типово: true

tax_query це масив, елементами якого є інші масиви, у кожному з яких вказується таксономія, її терміни і те, як використовувати ці терміни. Оператор relation вказується в першому масиві tax_query і визначає, як порівнювати вкладені масиви між собою. Така конструкція дозволяє створювати запит одночасно до кількох таксономій.

#1 Виведення записів з однієї таксономії

Виведемо записи з розділу (терміну) bob, який є елементом таксономії people:

$query = new WP_Query( array( 'people' => 'bob' ) );

#2 Виведемо пости, прикріплені до терміну bob з таксономії people :

$ args = array (
	'post_type' => 'post',
	'people' => 'bob'
);
$query = new WP_Query( $args );

Зробимо те саме, що і в прикладі вище, тільки з використанням аргументу tax_query:

$query = new WP_Query( array(
	'tax_query' => array(
		array(
			'taxonomy' => 'people',
			'field' => 'slug',
			'terms' => 'bob'
		)
	)
)));

#3 Висновок із кількох таксономій

Виведемо пости з кількох довільних таксономій:

$query = new WP_Query( array(
	'post_type' => 'post',
	'people' => 'bob',
	'language' => 'english'
)));

Аналог прикладу вищий. Виведемо записи, які одночасно відносяться до кількох довільних таксономій через tax_query:

$query = New WP_Query([
	'tax_query' => [
		'relation' => 'AND',
		[
			'taxonomy' => 'movie_janner',
			'field' => 'slug',
			'terms' => array( 'action', 'comedy' ),
		],
		[
			'taxonomy' => 'actor',
			'field' => 'id',
			'terms' => array( 103, 115, 206 ),
			'operator' => 'NOT IN',
		]
	]
]);

#4 Використання аргументу relation=OR

Виведемо пости, що знаходяться у рубриці quotesабо які мають формат quote(формати введені у версії 3.1). Для цього використовуємо аргумент relation:

$query = New WP_Query([
	'post_type' => 'post',
	'tax_query' => [
		'relation' => 'OR',
		[
			'taxonomy' => 'category',
			'field' => 'slug',
			'terms' => [ 'quotes' ]
		],
		[
			'taxonomy' => 'post_format',
			'field' => 'slug',
			'terms' => [ 'post-format-quote' ]
		]
	]
]);

#5 Багаторівневий складний запит із використання оператора relation=OR

Допустимо, нам потрібно отримати записи однієї з груп елементів таксономії.

Наприклад, треба отримати автомобілі марки ford чорного кольору або автомобілі марки bmw білого кольору:

У цьому прикладі перший оператор relation=OR впливає перші дочірні вкладені масиви. А оператор relation=AND у вкладених масивах впливає масиви вкладених масивів.

$query = новий WP_Query(
	[
		'tax_query' => [
			'relation' => 'OR',
			[
				'relation' => 'AND',
				[
					'taxonomy' => 'brand',
					'field' => 'slug',
					'terms' => [ 'ford' ]
				],
				[
					'taxonomy' => 'color',
					'field' => 'slug',
					'terms' => [ 'black' ]
				]
			],
			[
				'relation' => 'AND',
				[
					'taxonomy' => 'brand',
					'field' => 'slug',
					'terms' => [ 'bmw' ]
				],
				[
					'taxonomy' => 'color',
					'field' => 'slug',
					'terms' => [ 'white' ]

				]
			]
		]
	]
);

$query = new WP_Query( $args );

Використання get_posts()

#6 Виведемо заголовки всіх типів записів countriesз усіх підрубрик терміна 62, який відноситься до таксономії country:

$posts = get_posts(array(
	'tax_query' => array(
		array(
			'taxonomy' => 'country',
			'field' => 'id',
			'terms' => array( 62 )
		)
	),
	'post_type' => 'countries',
	'posts_per_page' => -1
)));

foreach( $posts as $pst ){
	echo $pst->post_title .'<br>';
}

#7 Виведемо всі записи довільного типу (article), що не належать до зазначених термінів (‘term-slug’, ‘term-slug-two’, ‘term-slug-three’) таксономії (artictag):

// отримаємо всі пости, що не належать до зазначених термінів

$post_type = 'article';
$tax = 'artictag';
$terms = ['term-slug', 'term-slug-two', 'term-slug-three'];

$ myposts = get_posts ([
	'posts_per_page' => -1,
	'post_type' => $post_type,
	'tax_query' => [
		[
			'taxonomy' => $tax,
			'terms' => $terms,
			'field' => 'slug',
			'operator' => 'NOT IN',
		]
	],
]);

$i = 0;
foreach( $myposts as $mypost ){
	echo sprintf( '%d <a href="%s">%s</a>',
		++$i, get_permalink( $mypost ), esc_html( $mypost->post_title )
	);
}

#8 Отримаємо всі записи типу func , яких немає в таксономії func_cat

Тобто. отримаємо записи типу func , які не мають жодного терміна з таксономії func_cat . Для цього використовуємо параметр ‘operator=NOT EXISTS’ .

$posts = get_posts([
	'tax_query' => [
		[
			'taxonomy' => 'func_cat',
			'operator' => 'NOT EXISTS',
		]
	],
	'post_type' => 'func',
	'posts_per_page' => -1
]);

foreach( $posts as $pst ){
	echo $pst->post_title .'<br>';
}

#9 Вибірка записів із таксономії та сортування за метаполем

Отримаємо записи типу ‘func’, які знаходяться в будь-якому елементі таксономії ‘tplcat’ і відсортуємо записи за числовим метаполем ‘views_prev_month’.

$query = New WP_Query([
	'post_type' => 'func',
	'posts_per_page' => -1,
	'tax_query' => [
		[
			'taxonomy' => 'tplcat',
			'operator' => 'EXISTS',
		]
	],
	'meta_key' => 'views_prev_month',
	'orderby' => [ 'meta_value_num'=>'DESC' ],
]);



Параметри Авторів

Отримує посади, що належать певним авторам.

author
(число)
ID автора.
author_name
(рядок)
Нік автора. Потрібно вказувати значення поля
user_nicename.
author__in
(масив)
Масив ID авторів, записи яких потрібно отримати.
author__not_in
(масив)
Масив ID авторів, записи яких потрібно виключити.

#1 Виведемо пости для одного автора

Пости за ID автора:

$query = new WP_Query( 'author=123' );

Пости з ніку автора:

$query = new WP_Query( 'author_name=rami' );

#2 Виведемо пости кількох авторів відразу

Пости чотирьох авторів за ID:

$query = new WP_Query( 'author=2,6,17,38');

#3 Виключимо пости автора

Виключимо пости автора 12 і покажемо всі пости, крім його:

$query = new WP_Query( 'author=-12' );

#4 Ще приклад

Показати всі сторінки автора 1 (author=1), відсортувати за заголовком (orderby=title) за абеткою (order=ASC) і не показувати прикріплені пости вгорі.

$query = new WP_Query('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');

#5 Кілька авторів одночасно

Отримаємо всі записи авторів з ID 2 та 6:

$query = new WP_Query( array( 'author__in' => array( 2, 6 ) ) ));

Отримаємо записи всіх авторів, крім авторів з ID 2 та 6:

$query = new WP_Query( array( 'author__not_in' => array( 2, 6 ) ) ));



Параметри записів (постів, сторінок)

Отримує окремі сторінки чи пости.

p
(число)
ID посту який потрібно отримати (p=27).
name
(рядок)
post_name (склад) запису (поста). Приклад:
name=o-saite.
title
(рядок)
Заголовок запису (поста). Приклад:
name=О сайте. З версії 4.4.
page_id
(число)
ID постійної сторінки, яку потрібно отримати (page_id=27)
pagename
(рядок)
Альт. назва постійної сторінки:
pagename=o-saite
post_parent
(число)
ID батьківської сторінки, дочірні сторінки для якої потрібно одержати (post_parent=27).
post_parent__in
(масив)
Вибере пости батьки яких вказані у масиві.
post_parent__not_in
(масив)
Вибере пости батьки яких не зазначені у масиві.
post__in
(масив)
Вкажіть масив ID постів, які потрібно отримати post__in => [5,12,2,14,7].

Примітка: якщо є записи, вони будуть включені автоматично. Вимкнути їх можна параметром ignore_sticky_posts.

Корисна порада. Якщо при виведенні кількох постів через post__inпублікації виводяться не в порядку, який вам потрібен, а стандартні властивості orderbyне допомагають, використовуйте 'orderby' => 'post__in'.

post__not_in
(масив)
Вибере всі посади крім зазначених.
post_name__in
(масив)
Вибере вказані пости. Вказувати потрібно post_name (slug) через кому або в масиві. З версії 4.4.

Пости/сторінки за ID

Виведемо пост за ID:

$query = new WP_Query('p=7');

Виведемо сторінку за ID:

$query = new WP_Query( 'page_id=7' );

Пости/сторінки по Слагу

Виведемо піст по Слагу:

$query = new WP_Query( 'name=about-my-life' );

Виведемо сторінку по Слагу:

$query = new WP_Query( 'pagename=contact' );

Дочірні пости/сторінки

Виведемо дочірню сторінку, використовуючи склад батьківської та дочірньої сторінки розділені слешем: parent_slug/child_slug

$query = new WP_Query( 'pagename=contact_us/canada&post_type=page' );

Виведемо дочірні сторінки, використовуючи батьківський ID:

$query = new WP_Query( 'post_parent=93&post_type=page' );

Виведемо сторінки верхнього рівня, виключимо всі дочірні:

$query = new WP_Query( 'post_parent=0&post_type=page' );

Виведемо пости, батьки яких вказані в масиві:

$query = new WP_Query( array( 'post_parent__in' => array( 2, 5, 12, 14, 20 ) ) ));

Численні висновки постів/сторінок

Виведемо лише зазначені пости:

$query = New WP_Query([
	'post_type' => 'page',
	'post__in' => [ 2, 5, 12, 14, 20 ]
]);

Виведемо всі посади, крім зазначених:

$query = New WP_Query([
	'post_type' => 'post',
	'post__not_in' => [ 2, 5, 12, 14, 20 ]
]);

Примітка: не можна об’єднувати post__in та post__not_in в одному запиті.

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

// неправильно
$exclude_ids = '1,2,3';
$query = new WP_Query(['post__not_in' => [$exclude_ids]]);

// Правильно
$exclude_ids = array(1, 2, 3);
$query = new WP_Query( [ 'post__not_in' => $exclude_ids ] );



Параметри Типів записів

Показує пости зазначеного типу.

post_type
(рядок/масив)
Записи якого типу потрібно показувати. За замовчуванням: post. Але якщо вказано параметр tax_query, то за промовчанням ставиться any.

Може бути:

  • 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

Пости за типом

Виведемо лише сторінки:

$query = new WP_Query( 'post_type=page' );

Виведемо всі пости, крім ревізій та типів постів, у яких при реєстрації параметр exclude_from_search виставлений у true:

$query = new WP_Query( 'post_type=any' );

Виведемо 4 типи постів одночасно:

$query = new WP_Query( array(
	'post_type' => array( 'post', 'page', 'movie', 'book' )
)));



Параметри довільних полів (postmeta)

Основним параметром для роботи з мета-даними WP_Query є meta_query. Він отримує записи (пости) за ключами та значеннями довільних полів. Принцип meta_query такий самий як і tax_query — масив, де кожен елемент своє чергу є масивом з параметрами запиту, тобто. meta_query – це масив масивів.

Така конструкція дозволяє створювати численні запити. Перший параметр relationпереважно масиві описує логічний зв’язок між запитами. Він може приймати значення AND(використовується за замовчуванням. Збіг з усіма запитами) або OR(збіг з будь-яким із запитів).

$args = [
	'meta_query' => [
		'relation' => 'OR',
		[
			'key' => 'color',
			'value' => 'blue'
		],
		[
			'key' => 'price',
			'value' => 20
		]
	]
];

Старі змінні запиту мета-даних: meta_key, meta_value, meta_value_num, meta_compareяк і раніше підтримуються і можуть бути використані для простих запитів, пов’язаних з довільними полями.

Список всіх параметрів пов’язаних з мета-даними:

meta_key
(рядок)
Ключ(назва) довільного поля.
meta_value
(рядок)
Значення довільного поля.
meta_value_num
(число)
Значення довільного поля, число.
meta_compare_key
(рядок) (з версії 5.1)
Оператор вказує на те, як потрібно шукати вказаний в
meta_key ключ. Можливо:
=або
LIKE.

За замовчуванням: ‘=’

meta_compare
(рядок)
Оператор перевіряє значення довільного поля. Можливо:
=,
!=,
>,
>=,
<,
<=,
LIKE,
NOT LIKE,
IN,
NOT IN,
BETWEEN,
NOT BETWEEN,
EXISTS(з версії 3.5),
NOT EXISTS(3.5),
REGEXP(3.7),
NOT REGEXP(3.7) і
RLIKE(3.7);

Типово ‘=’

meta_query
(масив)
Масив параметрів мета-даних визначальних висновок (цей параметр включає meta_key, meta_valueта meta_compareй замінює їх). З версії 3.1.
У масиві можна вказати такі параметри:

meta_queryповинен завжди містити масив масивів, навіть якщо робиться один запит. Наприклад:

// правильно
'meta_query' => [ [
	'key' => 'meta_key',
	'value' => 'val',
] ],

// неправильно
'meta_query' => [
	'key' => 'meta_key',
	'value' => 'val',
],
  • relation (рядок)
    Визначає логічний зв’язок між вкладеними масивами. Цей параметр вказується як рядок у головному масиві meta_queryта вказує як порівнювати між собою вкладені параметри запиту (вкладені масиви з параметрами запиту). Може бути:

    OR– вибрати мета-поля відповідні хоти під один масив з параметрами запиту.
    AND– (за замовчуванням) вибрати мета поля, які підходять для всіх масивів з параметрами запиту.

    • key (рядок | масив)
      Ключ поля. Можна вказати кілька ключів у масиві.
    • compare_key (рядок) (з версії 5.1)
      Як порівнювати вказане в key значення. Може бути:

      • =– Так само.
      • !=– не дорівнює. (WP 5.3)
      • LIKE– Містить зазначену підрядок.
      • NOT LIKE– НЕ містить зазначений підрядок. (WP 5.3)
      • IN– дорівнює одному зі значень. (WP 5.3)
      • NOT IN– НЕ одно одному зі значень. (WP 5.3) (WP 5.3)
      • REGEXP– збігається з регулярним виразом. (WP 5.3)
      • NOT REGEXP– НЕ збігається з регулярним виразом. (WP 5.3)
      • RLIKE– синонім REGEXP. (WP 5.3)
      • EXISTS-Аліас =. (WP 5.3)
      • NOT EXISTS-Аліас !=. (WP 5.3)

      За замовчуванням: ‘=’, або ‘IN’, коли $key містить масив

    • type_key (рядок) (з версії 5.3)
      Тип даних MySQL, який потрібно використовувати функції CAST(). Якщо вказано, то значення колонки meta_keyбуде спочатку перетворено на вказаний тип і тільки потім порівнюватиметься з вказаним значенням. Може бути:

      • BINARY– потрібно коли у регулярних висловлюваннях важливий регістр символів.

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

    • value (рядок/масив)
      Значення поля. Вказувати не потрібно, якщо в порівнянні використовується: ‘EXISTS’ або ‘NOT EXISTS’ (з версії 3.9).
    • compare (рядок)
      Як порівнювати вказане значення . Може бути:

      • =– Так само.
      • !=– не дорівнює.
      • >– Більше.
      • >=– більше або дорівнює.
      • <– менше.
      • <=– менше або дорівнює.
      • LIKE– вказаний у value підрядок є в рядку. Як ‘%значення%’ у запиті sql.
      • NOT LIKE– теж що LIKE тільки навпаки.
      • IN– у value вказуються кілька значень у масиві і пошук йде хоча б за одним із значень.
      • NOT IN– будь-яке значення, крім тих, що зазначені у вигляді масиву в value.
      • BETWEEN– у value вказуються 2 значення масиві: більше і менше і пошук йде між цих значень. наприклад: ‘value’ => array(5, 25) – від 5 до 25 (включно).
      • NOT BETWEEN– будь-яке значення, за межами діапазону вказаного у value, наприклад: ‘value’ => array(5, 25) – менше 5 і більше 25.
      • EXISTS– виведе все, де існує вказаний в ‘key’ ключ. ‘value’ не вказується у разі. (З версії 3.5)
      • NOT EXISTS– виведе все, де вказаний в ‘key’ ключ не існує. ‘value’ не вказується у разі. (З версії 3.5)
      • REGEXP– у value вказується регулярне вираз пошуку, наприклад: ‘value’ => ‘^bar’ , (знайде рядок: ‘bar is’). (З версії 3.7)
      • NOT REGEXP– у value вказується регулярний вираз для пошуку, знайде все, що не входить до цього виразу. (З версії 3.7)
      • RLIKE– синонім REGEXP. (З версії 3.7)

      За замовчуванням ‘IN’, коли значення масиву, ‘=’ в інших випадках.

    • type (рядок)
      тип довільного поля (якщо, наприклад, у полі вказуються лише числа то потрібно використовувати NUMERIC, щоб числа не порівнювалися як рядки).

      Зазначений тут тип безпосередньо передається в функцію mysql CAST() .

      Може бути:

      • NUMERIC– цілі числа. Можна вказати точність NUMERIC(p,s).
      • DECIMAL– дробові числа. Можна вказати точність DECIMAL(p,s). Наприклад: DECIMAL(5,2) – число з макс 5 цифрами всього (3 до роздільника) та 2 цифри після роздільника.
      • SIGNED– цілі числа, позитивні та негативні
      • UNSIGNED– цілі числа, лише позитивні
      • CHAR– рядок не чутливий до регістру
      • BINARY– рядок чутливий до регістру
      • DATETIME– дата і час
      • DATE– лише дата
      • TIME– Тільки час

      Якщо вказати будь-яке інше значення (або взагалі не вказати значення), воно перетвориться на CHAR.

      За замовчуванням:CHAR .

    Тип DATEпрацює при порівнянні BETWEENтільки якщо дата вказується у форматі Y-m-dта порівнюється з аналогічним форматом. Для типу DATETIMEце формат Y-m-d H:i:s.

Дивіться також окремий опис класу мета запитів: WP_Meta_Query

Сортування за довільним полем

Для сортування по полю, потрібно вказати ключ даних поля, а потім у параметрі ‘orderby’ вказати назву цього ключа, наприклад:

'meta_query' => array(
	'book_color' => array(
		'key' => 'color',
		'value' => 'blue',
		'compare' => 'NOT LIKE',
	),
),
'orderby' => 'book_color',
'order' => 'DESC',

Якщо довільне поле вказується через параметр meta_key та meta_value , то для сортування цього поля в параметрі orderby вкажіть значення: meta_value або meta_value_num (для чисел). Див. нижче опис параметра orderby.

'meta_key=color&meta_value=blue&orderby=meta_value&order=ASC'

Приклади (без meta_query)

#1 Пости з ключем довільного поля color, не зважаючи на значення цього поля.

$query = new WP_Query( 'meta_key=color' );

#2 Пости зі значенням довільно поля blue, не зважаючи на назву ключа.

$query = new WP_Query( 'meta_value=blue' );

#3 Пости з ключем поля color та значенням цього поля blue:

$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );

#4 Пости у яких ключ дорівнює color і значення поля не дорівнює blue:

$query = новий WP_Query(
	 array( 'meta_key' => 'color', 'meta_value' => 'blue', 'meta_compare' => '!=' )
);

#5 Продукти з ключем price та значення довільно поля менше або дорівнює 22.

При використанні параметра “meta_value” значення 99 буде більшим за 100, оскільки ці значення розпізнаються як рядки, а не числа. Для того, щоб числа розумілися як числа, потрібно використовувати параметр “meta_value_num”:

$query = новий WP_Query(
	 array( 'meta_key' => 'price', 'meta_value_num' => '22', 'meta_compare' => '<=', 'post_type' => 'product' )
);

#6 Пости зі значенням довільного поля рівним 0, не має значення який ключ.

$query = new WP_Query( array ( 'meta_value' => '_wp_zero_value' ) );

Приклади (з meta_query)

#1 Записи з одним довільним полем

Виведемо продукти (product) у яких ключ дорівнює color і значення поля не дорівнює blue:

$args = [
	'post_type' => 'product',
	'meta_query' => [
		[
			'key' => 'color',
			'value' => 'blue',
			'compare' => 'NOT LIKE'
		]
	]
];
$query = new WP_Query( $args );

#2 Записи, що мають одночасно два довільні поля

Приклад виведення постів з кількома довільними полями та вказівкою різних умов значень цих довільних полів:

$args = [
	'post_type' => 'product',
	'meta_query' => [
		[
			'key' => 'color',
			'value' => 'blue',
			'compare' => 'NOT LIKE'
		],
		[
			'key' => 'price',
			'value' => array( 20, 100 ),
			'type' => 'numeric',
			'compare' => 'BETWEEN'
		]
	]
];
$query = new WP_Query( $args );

#3 Записи мають хоча б одне поле

Виведемо пости з ключем color та значенням не (NOT LIKE) blue або (OR) пости з ключем price зі значеннями поля від 20 до 100:

$args = [
	'post_type' => 'product',
	'meta_query' => [
		'relation' => 'OR',
		[
			'key' => 'color',
			'value' => 'blue',
			'compare' => 'NOT LIKE'
		],
		[
			'key' => 'price',
			'value' => array( 20, 100 ),
			'type' => 'numeric',
			'compare' => 'BETWEEN'
		]
	]
];
$query = new WP_Query( $args );

#4 Записи з двома полями відсортовані за третім полем

Припустимо у нас є тип записів toys – іграшки, а в довільних полях ми вказуємо матеріал: тверда м’яка та вага іграшки в грамах: 100300500.

Отримаємо м’які іграшки вага яких від 200 до 500 грам і відсортуємо їх за ціною за спаданням:

$ args = array (
	'post_type' => 'toys',
	'meta_query' => array(
		array(
			'key' => 'type',
			'value' => 'soft',
		),
		array(
			'key' => 'weight',
			'value' => array(200, 500),
			'compare' => 'BETWEEN',
			'type' => 'NUMERIC',
		),
	),
	'meta_key' => 'price',
	'orderby' => 'meta_value_num',
	'order' => 'DESC'
);
$query = new WP_Query( $args );

#5 Отримаємо записи у яких є довільне поле

Цей приклад показує, як отримати записи для яких встановлені мініатюри (які мають довільне поле _thumbnail_id ):

$ args = array (
	'posts_per_page' => 3,
	'post_type' => 'post',
	'meta_query' => array(
		array(
			'key' => '_thumbnail_id',
			'compare' => 'EXISTS'
		)
	)
);
$query = new WP_Query( $args );

#6 Вкладені складні запити

З версії 4.1 можна створювати вкладені запити. Наприклад, виконаємо таку умову: потрібно показати продукти оранжевого кольору (color=orange) АБО маленькі (size=small) продукти червоного кольору (color=red):

$ args = array (
	'post_type' => 'product',
	'meta_query' => array(
		'relation' => 'OR',
		array(
			'key' => 'color',
			'value' => 'orange',
			'compare' => '=',
		),
		array(
				'relation' => 'AND',
				array(
						'key' => 'color',
						'value' => 'red',
						'compare' => '=',
				),
				array(
						'key' => 'size',
						'value' => 'small',
						'compare' => '=',
				),
		),
	),
);
$query = new WP_Query( $args );

#7 Сортування за довільним полем

З версії 4.2 масивів meta_query можна вказувати ключі, щоб потім сортувати за цим ключем:

$ args = array (
	'post_type' => 'book',
	'meta_query' => array(
		'book_color' => array(
			'key' => 'color',
			'value' => 'blue',
			'compare' => 'NOT LIKE',
		),
	),
	'orderby' => 'book_color',
);
$query = new WP_Query( $args );



Параметри MIME Типів записів

Вибирає вкладення із зазначеним MIME типом. Список типів MIME дивіться в описі wp_get_mime_types() .

post_mime_type
(рядок/масив)
Міме тип запису. Використовується тільки для вкладень записів з типом ‘attachment’.

Цей параметр буде працювати тільки коли параметр post_type = attachmentі post_status = inherit. Тобто. MIME-тип може бути лише у вкладень.

Отримаємо лише картинки будь-якого типу

$query = new WP_Query( array(
	'post_mime_type' => 'image',
	'post_type' => 'attachment',
	'post_status' => 'inherit',
)));

Отримаємо тільки картинки gif типу

$query = new WP_Query( array(
	'post_mime_type' => 'image/gif',
	'post_type' => 'attachment',
	'post_status' => 'inherit',
)));

Отримаємо всі типи вкладень, крім картинок

$query = new WP_Query( array(
	'post_mime_type' => array('application','text','video','audio'),
	'post_type' => 'attachment',
	'post_status' => 'inherit',
)));



Параметри статусів

Отримує пости із зазначеним статусом.

post_status
(рядок/масив)
Статус посту.

За промовчанням publish , а якщо користувач авторизований додається ще й private . Якщо запит запущено з адмін частини, додаються ще й захищені типи статусів: future , draft та pending . Усі типи статусів:

  • publish– Опублікований пост.
  • pending– Пост на модерації.
  • draft– чернетка.
  • auto-draft– чернетка, збережена самим WordPress (авто-збереження).
  • future– Запланований пост.
  • private– Особистий пост.
  • inherit– Ревізія чи вкладення.
  • trash– віддалений пост (у кошику). З версії 2.9.
  • any– усі статуси, крім статусів у параметрі яких вказано exclude_from_search=true . () .

Типово: ‘publish’

Пости за статусами

Отримаємо тільки чернетки:

$query = new WP_Query( 'post_status=draft' );

Отримаємо пости з різними статусами:

$query = новий WP_Query(
	 array( 'post_status' => array( 'pending', 'draft', 'future' ) )
);

Отримаємо всі види вкладень:

$query = новий WP_Query(
	  array( 'post_status' => 'any', 'post_type' => 'attachment' )
);



Параметри Дати (часу)

Виводить пости, що належать певному періоду часу.

year
(число)
4 цифри року (2013)
monthnum
(число)
Номер місяця (1 – 12)
w
(число)
Тиждень у році (з 0 до 53)
day
(число)
День місяця (1 – 31)
hour
(число)
Година (0 – 23)
minute
(число)
Хвилина (0 – 60)
second
(число)
Секунда (0 – 60)
m
(число)
Рік Місяць (201306)
date_query
(масив)
Параметри за якими відбудуватиметься запит. Працює на основі окремого класу: WP_Date_Query .

Цей параметр вказується як масив, який може містити вкладені масиви. Параметри: column, compare, relationдля основного масиву працюють як стандартні параметри для вкладених масивів (якщо вони є).

Можливі формати дат дивіться у документації PHP .

  • column — поле бази даних для запиту. Можливо:
    post_date
    post_date_gmt
    post_modified
    post_modified_gmt
    comment_date
    comment_date_gmt
    user_registered
    За замовчуванням: ‘post_date’
  • compare — Оператор порівняння для всіх вкладених масивів за промовчанням. Можливо: Можливо: =, !=, >, >=, <, , <=, IN, NOT IN, BETWEEN, NOT BETWEEN.
    За замовчуванням: ‘=’
  • relation — оператор, якщо вказано кілька масивів із датами:
    AND (враховувати одночасно всі зазначені масиви).
    OR (якщо є збіги хоча б із одним зазначеним масивом).
    За замовчуванням – OR

    Параметри нижче повинні використовуватись у вкладених масивах. Вони визначають запит на окрему дату.

    Також всі параметри нижче можуть бути використані в основному масиві.

    • before (рядок/масив) — Дата запису до якої будуть отримані. Приймає рядок, який зрозуміє функція strtotime() : всі можливі формати . Або можна передати масив з індексами: year , month , day : array(‘year’=>’2015’, ‘month’=>’5’, ‘day’=>’28’ )
      Щодо поточного часу сайту (не UTC) .
    • after (рядок/масив) — Дата запису “після” якої буде отримано. Приймає рядок, який зрозуміє функція strtotime() : всі можливі формати . Або можна передати масив з індексами: year , month , day : array(‘year’ => ‘2015’, ‘month’ => ‘5’, ‘day’ => ’28’ )
      Щодо поточного часу сайту (не UTC) .
    • column (рядок) – див. вище, тільки для конкретної дати. Типово: значення верхнього масиву.
    • compare (рядок) – див. вище, тільки для конкретної дати. За промовчанням ‘=’.
    • inclusive (логічний) – аргументи before та after обробляються включно, якщо true. Типово: false.
    • year (число/масив) – рік, наприклад 2013
    • dayofyear (число / масив) – номер дня в році, 1-366.
    • month (число/масив) – місяць, 1-12
    • week (число/масив) – тиждень, 0-53
    • day (число / масив) – день, 1-31
    • dayofweek (число/масив) – день тижня, 1-7, де 1 – неділя
    • dayofweek_iso (число/масив) – день тижня, 1-7, де 1 – понеділок
    • hour (число / масив) – година, 0-23
    • minute (число/масив) – хвилина, 0-60
    • second (число/масив) – секунда, 0-60

    У параметрах: year , month , week , dayofyear , day , dayofweek , dayofweek_iso , hour , minute , second можна вказати кілька значень, як масиву, якщо параметр compare відповідає.

#1. Отримаємо пости за сьогодні:

$Today = getdate();
$query = New WP_Query([
	'year' => $today['year'],
	'monthnum' => $today['mon'],
	'day' => $today['mday'],
]);

#2. Отримаємо пости за останній тиждень:

$week = date('W');
$year = date('Y');
$query = new WP_Query( 'year=' . $year . '&w=' . $week );

#3. Отримаємо пости за 20 грудня:

$query = new WP_Query( 'monthnum=12&day=20' );

#4. Отримаємо пости за проміжок часу з 1 березня до 15 березня 2010 року:

// Створимо нову функцію яка додасть умову where на запит
function filter_where( $where = '' ) {
	// з 1 березня по 15 березня 2010 року
	$where .= " AND post_date_gmt >= '2010-03-01' AND post_date < '2010-03-16'";
	return $where;
}

add_filter( 'posts_where', 'filter_where');
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where');

Запити вище повертають пости за вказаний період історії: ” Пости за Х місяць, Х день ” . Вони не можуть отримувати посади за довільний проміжок часу по відношенню до сьогодення. Тому запити типу “Пости за останні 30 днів” або “Пости за останній рік” не можливі у базовому варіанті, для таких запитів потрібно використовувати фільтр “posts_where”. Приклади нижче показують, як це робити.

#5. Отримаємо пости за останні 30 днів:

// Створимо нову функцію яка додасть умову where на запит
function filter_where( $where = '' ) {
	// Останні 30 днів
	$where .= "AND post_date > '" . date('Ymd', strtotime('-30 days')) . "'";
	return $where;
}

add_filter( 'posts_where', 'filter_where');
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where');

#6. Отримаємо пости за проміжок від 30 до 60 днів, до сьогодення:

// Створимо нову функцію яка додасть умову where на запит
function filter_where( $where = '' ) {
	// від 30 до 60 днів
	$where .= "AND post_date >= '" . date('Ymd', strtotime('-60 days')) . "'". "AND post_date <= '". date('Ymd', strtotime('-30 days')) . "'";
	return $where;
}

add_filter( 'posts_where', 'filter_where');
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where');

Параметр “m” може бути встановлений лише у списку постів в адмін-панелі. Він корисний коли ви вибираєте з випадаючого списку select де дата встановлена ​​як YYYYmm число.

Приклади з параметром date_query

#1. Отримаємо пости між 9 та 17 годинами:

$args = [
	'date_query' => [
		[
			'hour' => 9,
			'compare' => '>=',
		],
		[
			'hour' => 17,
			'compare' => '<=',
		],
		[
			'dayofweek' => [ 2, 6 ],
			'compare' => 'BETWEEN',
		],
	],
	'posts_per_page' => -1,
];
$query = new WP_Query( $args );

#2. Отримаємо пости за проміжок часу: 1 січня по 28 лютого:

Дати можна вказувати цифрами та рядками, тому що аргументи before та after обробляються функцією PHP strtotime() , а вона розуміє рядки.

$args = [
	'date_query' => [
		[
			'after' => 'January 1st, 2013',
			'before' => [
				'year' => 2013,
				'month' => 2,
				'day' => 28,
			],
			'inclusive' => true,
		],
	],
	'posts_per_page' => -1,
];
$query = new WP_Query( $args );

#3. Отримаємо пости, опубліковані рік тому, але змінені в останній місяць:

$args = [
	'date_query' => [
		[
			'column' => 'post_date_gmt',
			'before' => '1 рік тому',
		],
		[
			'column' => 'post_modified_gmt',
			'after' => '1 місяць тому',
		],
	],
	'posts_per_page' => -1,
];
$query = new WP_Query( $args );

#4. Отримаємо пости за останні 2 тижні, використавши рядок ‘2 weeks ago’:

$query = New WP_Query([
	'date_query' => [
		'after' => '2 weeks ago',
	],
]);

#5. Отримаємо записи за останні 2 місяці, опубліковані у будні дні:

$query = New WP_Query([
	'date_query' => [
		'after' => '2 місяці тому',
		[
			'dayofweek' => [1, 5],
			'compare' => 'BETWEEN',
		],
	],
]);

Аргумент date_query працює і з класом WP_Comment_Query, тому його точно також можна використовувати функції: get_comments() .



Параметри Сортування та порядку

Сортує та встановлює напрямок сортування.

Параметри сортування не працюватимуть, якщо вказати параметр fields = ids, тому що в цьому випадку, у запиті не буде полів, за якими можна відсортувати результат.

order
(рядок)
Напрямок сортування за параметром orderbyможе бути:

  • ASC– По порядку, від меншого до більшого (1, 2, 3; a, b, c).
  • DESC– у зворотному порядку, від більшого до меншого (3, 2, 1; c, b, a).
orderby
(рядок/масив)
Поля якими можна сортувати пости. Може бути

  • none— не сортувати, виводити як є у БД. Рівносильно сортування за ID. З версії 2.8.
  • ID– Сортування за ID.
  • author– Сортування за ID авторів.
  • title– Сортування за заголовком.
  • name– За назвою посту (ярлик, склад посту).
  • date– Сортування за датою публікації.
  • modified– Сортування за датою зміни.
  • type– За типом посту (post_type). З версії 4.0
  • parent– Сортування за значенням поля parent.
  • rand– Випадковий порядок.
  • RAND(x)– У випадковому порядку для числових значень. Тут “x” – це ціле число.
  • comment_count– Сортування за кількістю коментарів. З версії 2.9.
  • relevance– За умовою пошуку (параметр s ). Сортування йде в такому порядку: 1) чи відповідає вся пропозиція. 2) всі умови пошуку у заголовку запису. 3) будь-які слова із запиту пошуку в заголовку запису. 4) повну пропозицію знайдено у контенті запису.
  • menu_order— стандартно використовується для сторінок та вкладень. Порядковий номер вказується на сторінці редагування посту.
  • meta_value– За значенням довільного поля.

    Важливо: параметр meta_keyтакож має бути визначений. Примітка: сортування буде алфавітним і буде не логічним, якщо значення довільних полів числа (буде, наприклад, так 1, 3, 34, 4, 56, 6 і т.д., а не 1, 3, 4, 6, 34, 56).

  • meta_value_num– Сортування за довільними полями, значення яких є числами. З версії 2.8.
  • ключ массива из meta_query– У цьому випадку сортування буде за значенням довільного поля вказаного в масиві meta_query.
  • post__in– Враховує порядок зазначених ID у параметрі post__in . Параметр order ігнорується.
  • post_name__in– Враховує порядок зазначених імен у параметрі post_name__in . Параметр order ігнорується.
  • post_parent__in– Враховує порядок зазначених ID у параметрі post_parent__in . Параметр order ігнорується.

З версії WordPress 4.0 в orderby можна вказувати масив, що поєднує в собі обидва параметри: orderby і order . Зроблено це для сортування за декількома колонками одночасною Синтаксис такий:

'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )

#1 Сортування за заголовком

$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );

Відсортуємо по порядку в меню, а потім по заголовку

$query = new WP_Query( array ( 'orderby' => 'menu_order title', 'order' => 'DESC' ) );

#2 Виведемо один випадковий пост:

$query = New WP_Query([
	'orderby' => 'rand',
	'posts_per_page' => '1'
]);

#3 Відсортуємо пости за кількістю коментарів:

$query = new WP_Query( [ 'orderby' => 'comment_count' ] );

#4 Відсортуємо товари за ціною (довільне поле price):

$query = New WP_Query([
	'post_type' => 'product',
	'orderby' => 'meta_value',
	'meta_key' => 'price'
]);

#5 Множинне сортування

Виведемо пости відсортовані за двома полями: ‘title’ і ‘menu_order’ (title першорядний):

$query = New WP_Query([
	'post_type' => 'page',
	'orderby' => 'title menu_order',
	'order' => 'ASC'
]);

#6 Множинне сортування з використанням масиву (з версії 4.0)

Отримаємо сторінки відсортовані за заголовком (title) та номером меню (menu_order) у різному порядку (ASC/DESC):

$query = New WP_Query([
	'orderby' => [ 'title' => 'DESC', 'menu_order' => 'ASC' ]
]);

#7 Сортування за ‘meta_value’ для нового типу посту (post_type)

Виведемо пости типу my_custom_post_type відсортовані за ключом довільного поля “age” і відфільтровані, щоб показувалися тільки пости зі значенням поля 3 і 4:

$query = New WP_Query([
	'post_type' => 'my_custom_post_type',
	'meta_key' => 'age',
	'orderby' => 'meta_value_num',
	'order' => 'ASC',
	'meta_query' => [
		[
			'key' => 'age',
			'value' => [3, 4],
			'compare' => 'IN',
		]
	]
]);

#8 Сортування за кількома метаполями

Щоб відсортувати результат за двома різними метаполями, наприклад, спочатку city , а потім state , потрібно вказати ключі для масивів в масиві meta_query і потім використовувати ці ключі в параметрі orderby :

$query = New WP_Query([
	'meta_query' => [
		'relation' => 'AND',
		'state_clause' => [
			'key' => 'state',
			'value' => 'Wisconsin',
		],
		'city_clause' => [
			'key' => 'city',
			'compare' => 'EXISTS',
		],
	],
	'orderby' => [
		'city_clause' => 'ASC',
		'state_clause' => 'DESC',
	],
]);



Параметри Пагінації та Відступу

nopaging
(логічний)
Вимкне пагінацію, виведе всі пости на одній сторінці.
posts_per_page
(число)
Кількість постів на одній сторінці. Якщо виставити -1, то будуть виведені всі пости (без пагінації).

З версії 2.1 замінює параметр showposts . Встановіть параметр paged , якщо пагінація не працює після використання цього параметра.

Примітка: якщо запит у feed частині, WP перезаписує цей параметр опцією posts_per_rss . Щоб вплинути на виведення постів у фіді, використовуйте фільтри post_limitsабо pre_option_posts_per_rss.

posts_per_archive_page
(число)
Кількість постів для сторінок архівів: для сторінок, які відповідають умовам
is_archive() або
is_search() . Цей параметр перезаписує параметри
posts_per_pageта
showposts.
offset
(число)
Скільки постів пропустити зверху вибірки (верхній відступ). Можна відступити від першого посту в результатах запиту. Наприклад, стандартно запит повертає 5 постів, а якщо до того ж запиту додати параметр offset=1, то будуть повернуті також 5 постів, але перший пост буде пропущено.

Цей параметр перебиває параметр pagedі може зламати пагінацію. Якщо таке трапилося читайте вирішення проблеми .

paged
(число)
Номер сторінки пагінації. Показує пости, які у звичайному режимі мали бути показані сторінці пагінації Х.

Не можна використовувати разом із параметром offset, тому що offsetбільш пріоритетний та замінить цей параметр.

page
(число)
Номер статичної домашньої сторінки. Показує записи, які у звичайному режимі мали бути показані сторінці пагінації
Х головної статичної сторінці (front page).
ignore_sticky_posts
(логічний)
caller_get_posts
(застарілий з WP 3.1)
Ігнорувати приліплені пости чи ні (true/false). Приліплені пости не показуватимуться на початку списку, але вони не виключаються і виводитимуться у звичайному порядку.

caller_get_postsбув перейменований на параметр ignore_sticky_posts. Використання цього параметра викликає помилку _deprecated_argument() .

#1 Пости на сторінці

Отримаємо 3 пости:

$query = new WP_Query( 'posts_per_page=3' );

Отримаємо всі пости:

$query = new WP_Query( 'posts_per_page=-1' );

Отримаємо всі пости та відключимо пагінацію:

$query = new WP_Query( 'nopaging=true' );

#2 Відступи зверху

Отримаємо пости починаючи з четвертого (пропустимо перші 3):

$query = new WP_Query( 'offset=3' ) );

Отримаємо 5 постів, які йдуть за трьома першими постами:

$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 3 ) );

Пропустимо перший/один пост (offset=1) і повернемо наступні 5:

$query = new WP_Query( 'posts_per_page=5&offset=1' );

#3 Записи зі сторінки пагінації 6

$query = new WP_Query( 'paged=6' );

#4 Записи з поточної сторінки

Отримаємо пости з поточної сторінки пагінації. Корисно при побудові довільної пагінації:

$query = new WP_Query( [ 'paged' => get_query_var( 'paged' ) ] ));

Отримаємо пости з поточної сторінки та встановимо параметр paged в 1, коли змінна не визначена першій сторінці пагінації:

$paged = get_query_var('paged')? get_query_var('paged'): 1;
$query = new WP_Query(['paged' => $paged]);

Використовуйте get_query_var('page'), якщо потрібно отримати номер сторінки пагінації статичної головної сторінки сайту – is_front_page() . Змінна pageв цьому випадку містить номер пагінації на сторінках типу post, коли в контенті використовується тег розбиття контенту на сторінки <!--nextpage-->.

Виведення поточної сторінки пагінації на статичній головній сторінці:

$paged = get_query_var('page')?: 1;
$query = new WP_Query(['paged' => $paged]);

#5 Приліплені записи (пости)

# Всі приліплені записи
$sticky = get_option('sticky_posts');
$query = new WP_Query(['post__in' => $sticky]);
# Тільки перший приліплений піст
$sticky = get_option('sticky_posts');
$query = new WP_Query( 'p=' . $sticky[0] );
# Перший приліплений піст, якщо такого посту немає, то останній опублікований
$ args = array (
	'posts_per_page' => 1,
	'post__in' => get_option( 'sticky_posts' ),
	'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );
# Перший приліплений піст, якщо такого посту немає, то нічого не виводимо
$sticky = get_option('sticky_posts');

if ( ! empty($sticky[0]) ) {

	$query = new WP_Query( array(
		'posts_per_page' => 1,
		'post__in' => $sticky,
		'ignore_sticky_posts' => 1
	)));

	// формуємо висновок...
}
# 5 останніх приліплених записів
$sticky = get_option('sticky_posts'); // всі Sticky записи

rsort($sticky); // відсортуємо – нові вгорі

$ sticky = array_slice ($ sticky, 0, 5); // Отримаємо перші 5

$query = new WP_Query( [ 'post__in'=>$sticky, 'ignore_sticky_posts'=>1 ] );

#6 Приховування приліплених постів

Виключимо всі приліплені пости із запиту:

$query = new WP_Query( [ 'post__not_in' => get_option( 'sticky_posts' ) ] ));

Виключимо приліплені пости із категорії. Поверне всі пости рубрики, але приліплені пости не будуть зверху, вони виводяться як звичайні пости (за датою):

$query = new WP_Query( [ 'ignore_sticky_posts' => 1, 'posts_per_page' => 3, 'cat' => 6 ] );

Виключимо приліплені пости із категорії. Поверне всі посади рубрики, але приліплені посади будуть повністю виключені. Також додамо сюди правило для правильної пагінації:

$paged = get_query_var('paged')?: 1;
$sticky = get_option('sticky_posts');
$query = new WP_Query( array(
	'cat' => 3,
	'ignore_sticky_posts' => 1,
	'post__not_in' => $sticky,
	'paged' => $paged
)));



Параметри коментарів

У об’єкт WP_Query додаються дані коментарів запису, якщо це окремий запис. У нижченаведених параметрах вказується як потрібно отримувати коментарі в таких випадках.

comment_status
(рядок)
Статус коментарів.
ping_status
(число)
Статус пінгу.
comments_per_page
(число)
Кількість коментарів для отримання на окремій сторінці коментарів. За замовчуванням опція:
comments_per_page.
comment_count
(число/масив)
Кількість коментарів, що має мати пост. З версії 4.9.

  • Якщо вказати число, отримає пости із зазначеним числом коментарів (оператор пошуку =).
  • Масив дозволяє вказати варіант порівняння кількості коментарів. У масиві можна вказати параметри:
    • value (число) – кількість коментарів для порівняння.
    • compare (рядок) – як порівнювати кількість коментів. Можливо: =, !=, >, >=, <, <=. За замовчуванням: =.

#1 Пости, у яких є 1 або більше коментарів:

$query = New WP_Query([
	'comment_count' => [
		'value' => 1,
		'compare' => '>=',
	],
]);

  • Пошук за замовчуванням відбувається за полями post_title, post_excerpt, post_content.
  • Якщо пошукова фраза складається з понад 10 слів, вона трактується як ціла фраза sentence=true.
s
(рядок)
Пошукова фраза. Фраза, що складається з декількох слів за умовчанням, ділиться на окремі слова. Кожне слово бере участь у пошуку окремо у вигляді: слово1 ИЛИ слово2 ИЛИ ....

Розділювачем слів є символи t ",+(tab, пробіл, кома, плюс, лапка).

Регулярка, яка розбиває фразу на слова:

".*?("|$)|((?<=[t ",+])|^)[^t ",+]+

SQL частина запиту для пошуку створюється методом WP_Query::parse_search() , він розбирає фразу на слова.

Кожне окреме слово (термін) потім опрацьовується методом WP_Query::parse_search_terms() .

  • Символ "– Слова або фраза обрамлена подвійними лапками братиме участь у пошуку як є.Наприклад, ми хочемо знайти слово станция, за замовчуванням будуть знайдені і ті записи в яких є слово электростанция, але якщо вказати запит пошуку в лапках і додати пробіл на початку, то цей пробіл буде використовуватися в пошуку " станция".

    Або таким же чином ми можемо шукати за входженням фрази, обрамивши потрібну частину пошукової фрази або всю фразу в лапки (для всієї фрази можна просто додати лапки на початок фрази), наприклад:

    "Пошук у ОП не такий простий → Пошук у ОП не такий простий
    "Пошук у ВП не такий простий" → Пошук у ВП не такий простий
     Пошук у ОП "не так простий" → Пошук | у | ВП | не так простий
    "Пошук у ВП" не такий простий → Пошук у ВП | не | так | простий
  • Символ -– Символ вилучення слова. При додаванні на початку слова пошуку дефісу буде вказано, що цього слова не повинно бути в тексті, що шукається. Наприклад: подушка -диванповерне пости, що містять подушка, але не містять слово диван.Ви можете змінити символ-виключення через фільтр wp_query_search_exclusion_prefix .
  • Фильтрация слов— тире, окремі літери az та стоп слова видаляються з термінів (окремих слів) пошуку після розбиття фрази пошуку на слова (терміни).Стоп слова визначаються методом WP_Query::get_search_stopwords() . За замовчуванням до них входить локалізований список наступних слів:
    _x( 'about,an,are,as,at,be,by,com,for,from,how,'.
    	'in,is,it,of,on,or,that,the,this,to,was,what,'.
    	'when,where,who,will,with,www',
    	'Comma-separated list of search stopwords in your language'
    )

    Змінити список цих стоп слів можна через фільтр wp_search_stopwords .

exact
(логічний)
true– не додавати на кінці пошукових фраз %у запиті SQL.
Вказувати trueмає сенс, якщо sentence=trueі нам потрібно знайти пост у назві/контенті/описі якого знаходиться точно зазначена фраза і нічого більше.

Наприклад словобуде оброблено в SQL як = 'слово', а не LIKE '%слово%'.

Типово: false

sentence
(true/false)
true– Шукати за повною пошуковою фразою. фраза поискабуде оброблено LIKE '%фраза поиска%', а не LIKE '%фраза%' AND LIKE '%поиска%'.
false– Пошукова фраза ділиться на слова і пошук відбувається за словами.

Типово: false

#1 Пошук постів зі словами

Результат пошуку поверне пости, які містять усі слова searchта phrase.

$query = new WP_Query( 's=search phrase' );

#2 Пошук постів за пропозицією

Результат пошуку поверне пости, що містять фразу search phrase.

$query = new WP_Query( 's=search phrase &sentence=1' );

#2 Виняток слів

Результат пошуку поверне пости, які містять слово searchта не містять слово phrase.

$query = new WP_Query( 's=search -phrase' );



Параметри Полів, що повертаються

Встановлює, які дані повинен повертати запит.

fields
(рядок/масив)
Які дані повертати. За замовчуванням повертаються усі.

  • ids– Поверне масив з ID постів.
  • id=>parent– Поверне асоціативний масив [parent => ID, …].
  • Вставляючи будь-які інші параметри, поверне всі поля (за замовчуванням) – масив об’єктів постів.
no_found_rows
(логічний)
true – не підраховувати кількість знайдених рядків.
false – додасть SQL запит SQL_CALC_FOUND_ROWS.

У деяких випадках може пришвидшити запит.
Типово: false



Параметри кешування

Не додає дані до кешу під час виконання запитів.

cache_results
(true/false)
Чи кешувати інформацію про пост.

Типово: true

update_post_meta_cache
(true/false)
Чи кешувати інформацію про мета даних посту.

Типово: true

update_post_term_cache
(true/false)
Чи кешувати інформацію про прив’язку посту до термінів та таксономій.

Типово: true

lazy_load_term_meta
(true/false)
Чи слід «ліниво» завантажувати метадані терміни.

false — відключить відкладене завантаження метаданих терміна, і кожен виклик
get_term_meta() буде звертатися до бази даних.

За замовчуванням: $update_post_term_cache

#1 Виведемо 50 постів, але не буде додавати інформацію про посади в кеш:

$query = new WP_Query( array( 'posts_per_page' => 50, 'cache_results' => false ) );

#2 Виведемо 50 постів, але не будемо додавати мета дані посту в кеш

$query = new WP_Query( array( 'posts_per_page' => 50, 'update_post_meta_cache' => false ) );

#3 Виведемо 50 постів, але не будемо додавати до кешу інформацію про терміни постів

$query = new WP_Query( array( 'posts_per_page' => 50, 'update_post_term_cache' => false ) );

Зазвичай ці функції використовувати не потрібно – кеш необхідний! Однак такий підхід може стати в нагоді в ряді випадків. Наприклад, якщо нам потрібно отримати список заголовків постів і не потрібна інша інформація про посади: ні про таксономії ні про мета даних. Не завантажуючи цю інформацію, ми можемо зберегти час на непотрібних SQL запитах.

Примітка: якщо використовується плагін постійного кешування , всі ці прапори встановлюються в false за замовчуванням, оскільки немає потреби оновлювати кеш під час кожного завантаження сторінки.



Параметри Фільтрів (хуків)

suppress_filters
(true/false)
Чи слід відключати роботу деяких фільтрів (хуків) у класі WP_Query. Увімкнення цього параметра скасовує всі фільтри зміни SQL запиту, такого типу posts_*або comment_feed_*.

true – відключити обробку наступних хуків:

posts_search
posts_search_orderby

posts_where
posts_join

posts_where_paged
posts_groupby
posts_join_paged
posts_orderby
posts_distinct
post_limits
posts_fields
posts_clauses

posts_where_request
posts_groupby_request
posts_join_request
posts_orderby_request
posts_distinct_request
posts_fields_request
post_limits_request
posts_clauses_request

posts_request
posts_results
the_posts

comment_feed_join
comment_feed_where
comment_feed_groupby
comment_feed_orderby
comment_feed_limits

Типово: false



Параметри Доступу

Показує посади, якщо користувач має достатні права.

perm
(рядок)
Доступ користувача.

Виведемо опубліковані приватні пости, якщо користувач має достатні для перегляду права:

$query = New WP_Query([
	'post_status' => [ 'publish', 'private' ],
	'perm' => 'readable'
]);



Комбінування параметрів

#1. Комбінування у рядку

Ви, напевно, помітили, що параметри з’єднуються між собою символом амперсанд – &, саме цим символом параметри комбінуються (об’єднуються).

Отримаємо пости з категорії 3за 2004 рік:

$query = new WP_Query( 'cat=3&year=2004' );

Отримаємо пости з категорії 1, що мають мітку apples:

$query = new WP_Query( 'cat=1&tag=apples' );

#2. Комбінування зі змінними

Пости з категорії 13 за поточний місяць на головній сторінці блогу:

if ( is_home() ) {
	$query = new WP_Query( $query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp') ) );
}

#3. Комбінування масивом

Поверне лише 2 пости, з категорії 1 та 3, відсортовані у зворотному порядку за заголовком:

$query = new WP_Query( array(
   'category__and' => array(1,3),
   'posts_per_page' => 2,
   'orderby' => 'title',
   'order' => 'DESC',
));

Приклади

#1. На головній виключимо пости з рубрики 3

Щоб на головній сторінці блогу виключити пости, що знаходяться в категорії 3, потрібно вставити наступний код у файл index.php перед початком Цикл WordPress:

<?php
if ( is_home() ) {
	query_posts('cat=-3');
}
?>

#1.2. Можна додати ще кілька категорій до виключення:

<?php
if ( is_home() ) {
	$query = new WP_Query("cat=-1,-2,-3");
}
?>

#2. Отримаємо певний пост (пост із ID = 5):

<?php
// retrieve one post with an ID of 5
$query = New WP_Query('p=5');
?>

#3. Якщо потрібно використовувати функцію “читати далі” (read more) з новим запитом, потрібно переключити глобальну змінну $moreна 0:

<?php
// retrieve one post with an ID of 5
$query = New WP_Query('p=5');

global $more;
// set $more to 0 in order to only get the first part of the post
$ більше = 0;

// the Loop
while (have_posts()) : the_post();
  // the content of the post
  the_content('Read the full post'');
endwhile;
?>

#4. Отримуємо певну сторінку (сторінку 7):

<?php
$query = new WP_Query('page_id=7'); // отримає лише сторінку з ID 7
?>

або

<?php
$query = новий WP_Query('pagename=o-saite'); // отримає лише сторінку "o-saite"
?>

#4.1. Для дочірніх сторінок потрібно вказувати ім’я батьківської сторінки та дочірньої сторінки. Імена розділяються слешем ( /). Приклад:

<?php
$query = новий WP_Query('pagename=o-saite/avtori'); // отримає сторінку "avtori", яка є дочірньою до "o-saite"
?>

Вставлення змінних у параметри запиту

Можна створювати динамічні параметри запиту, якщо потрібно, щоб запит змінювався залежно від будь-яких обставин, для цього значення параметра потрібно записати в змінну, а потім змінну передати в параметри запиту, зробити це можна кількома способами:

#1. Складання запиту з використанням одинарних лапок ' ':
<?php
$category_var = $cat; // задаємо змінною $category_var ID поточної категорії
$query = 'cat='. $category_var. '&orderby=date&order=ASC'; // збираємо запит
$query = New WP_Query($query); // запускаємо запит до БД
?>
#2. Складання запиту з використанням подвійних лапок" "

Змінні всередині подвійних лапок інтерпретуються PHP як змінні, а не як простий текст:

<?php
$current_month = date('m');
$current_year = date('Y');

$query = новий WP_Query("cat=22&year=$current_year&monthnum=$current_month&order=ASC");
?>
<!-- тут йде Цикл WordPress -->
#3. Використання глобальної змінної$query_string

Яка містить базовий запит для функції query_posts. Якщо нам потрібно не порушувати стандартне виведення постів WordPress (наприклад, на сторінці категорій), але при цьому прибрати пагінацію (вивести всі пости на одній сторінці), то ми можемо доповнити базовий запит функції query_posts, параметром posts_per_page=-1:

<?php
global $wp_query;
$wp_query = new WP_Query( $query_string . '&posts_per_page=-1');
while( have_posts() ){
	the_post();
	// тут йде Цикл WordPress
}

wp_reset_query(); // Скидання глобальної $wp_query
?>

Можна виміряти значення posts_per_pageна конкретну кількість необхідних постів на одній сторінці. Наприклад, posts_per_page=10виведе лише 10 постів, а якщо при цьому в кінці циклу поставити тег шаблону posts_nav_link() , то під циклом з’явиться посилання для переходу до наступних 10 постів (посилання пагінації).

#4. Параметри також можна передати у вигляді масиву

Так вони будуть наочнішими і читанішими. Наприклад, приклад 2 можна записати так:

$query = новий WP_Query(array(
	'cat' => 22,
	'year' => $current_year,
	'monthnum' => $current_month,
	'order' => 'ASC',
));

Як бачите, тут можна поставити кожну змінну на окремий рядок, а це більш зрозуміло і читаємо.

Додавання параметрів на запит

Збереження базового запиту поточної сторінки та додавання до нього своїх параметрів

функція query_posts() повністю переписує запит, якщо, наприклад, ми напишемо query_posts('cat=1'), то інші параметри запиту, які використовуються для поточної сторінки (наприклад, сортування, пагінація і т.д.), будуть втрачені та будуть виведені пости категорії 1 з іншими параметрами за замовчуванням . Щоб зберегти базові параметри запиту та доповнити/замінити їх своїми, потрібно використовувати PHP функцію array_merge() (об’єднує 2 масиви в один):

global $wp_query;
query_posts(
	array_merge(
		array('cat' => 1), // це параметр, який додали ми
		$wp_query->query // це масив базового запиту поточної сторінки
	)
);

Цей приклад по суті те саме, що і приклад 3 (Використання глобальної змінної $query_string ), тільки з використанням масивів.



Нотатки по фільтрам

Щоб змінити SQL запит можна використовувати такі фільтри:

Фільтри, що спрацьовують до встановлення запиту пагінації:
Фільтри, що спрацьовують після встановлення запиту пагінації:
  • posts_where_paged – змінює SQL ‘WHERE’ під час пагінації
  • posts_groupby – змінює SQL ‘GROUP BY’
  • posts_join_paged – змінює SQL ‘JOIN’ під час пагінації
  • posts_orderby – змінює SQL ‘ORDER BY’
  • posts_distinct – змінює SQL ‘DISTINCTROW’
  • post_limits – змінює SQL ‘LIMIT’
  • posts_fields – змінює отримані поля таблиці
  • posts_clauses – дозволяє змінювати всі частини одночасно.
    Array (
    	[where] => AND 1 = 1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
    	[groupby] => wp_posts.ID
    	[join] => INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
    	[orderby] => wp_posts.post_date DESC
    	[distinct] =>
    	[fields] => wp_posts.
    	[limits] => LIMIT 0, 10
    )

Важливо: якщо вказано параметр suppress_filters = true , то жоден із цих фільтрів не працюватиме — вони будуть пропущені.



Методи та властивості класу

Властивості класу WP_Query

$query
Зберігає рядок запиту.
$query_vars
Асоціативний масив з даними запиту.
$tax_query
Запит для таксономії, об’єкт, який передається в
get_tax_sql() .
$meta_query
Запит для метаполів.
$date_query
Запит на дат.
$queried_object
Застосовується у запитах типу: рубрика, автор, пост або сторінка. Містить інформацію про категорію, автора, пост або сторінку.
$queried_object_id
Якщо запит відноситься до рубрики, автора, посту або сторінки, містить відповідний ID.
$request
Повний запит SQL, який був побудований на основі переданих параметрів запиту.
$posts
Заповнюється даними постів, отриманими з Бази Даних.
$post_count
Кількість постів, що виводяться на сторінці.
$current_post
Доступний під час циклу. Індекс поточної посади, що виводиться.
$in_the_loop
Логічна змінна. Визначає почати цикл і чи об’єкт, що викликається, в циклі.
$post
Доступний під час циклу. Пост який виводиться зараз.
$comments
Список коментарів для поточного посту.
$comment_count
Кількість коментарів для постів.
$current_comment
Поточний коментар у циклі коментарів.
$comment
ID поточного коментаря.
$found_posts
Кількість усіх знайдених постів.
$max_num_pages
Кількість сторінок пагінації:
$found_posts /
$posts_per_page
$is_single, $is_page, $is_archive, $is_preview, $is_date, $is_year, $is_month, $is_time, $is_author, $is_category, $is_tag, $is_tax, $is_search, $is_feed, $is_comment_feed, $is_trackback, $is_ , $is_404, $is_comments_popup, $is_admin, $is_attachment, $is_singular, $is_robots, $is_posts_page, $is_paged
логічні значення. Визначають до якого типу сторінки відноситься поточний запит.
$stopwords
Кешований список стопслів для пошуку.

Методи класу WP_Query

&(Амперсанд) перед методом, викликає його як посилання на внутрішні змінні функції (це не оптимізація продуктивності). Докладніше читайте тут .

__construct( $query )
Конструктор класу Якщо дані запиту передані, викликає метод
query() і передає йому дані.
init()
Активує об’єкт, виставляє все значення властивостей null, 0 чи false.
parse_query( $query )
Отримує параметри запиту, аналізує та виставляє базові властивості класу:
$posts ,
$post_count ,
$post і
$current_post .
parse_query_vars()
Аналізує старий запит наново.
get($query_var)
Отримує змінну запиту на ім’я.
set($query_var, $value)
Встановлює змінну запиту. Вказуються: назва змінної та її значення.
get_posts()
Отримує необхідні посади з БД. Також заповнює властивості
$posts та
$post_count .
next_post()
Використовується під час циклу. Переходить до наступного посту в масиві
$posts . Встановлює
$current_post та
$post . Метод не встановлює глобальну змінну
$post , а впливає змінну всередині класу. Повертає дані поточного посту (об’єкт).
the_post()
Використовується під час циклу. Переходить до наступного посту та змінює глобальну змінну
$post .
have_posts()
Використовується прямий перед циклом. Перевіряє, чи є пости для виведення.
rewind_posts()
Скидає змінні
$current_post та
$post .
query($query)
Викликає методи:
parse_query() та
get_posts() . Повертає результат
get_posts() .
get_queried_object()
Заповнює змінну
$queried_object , якщо вона ще не заповнена та повертає її.
get_queried_object_id()
Заповнює змінну
$queried_object_id , якщо вона ще не заповнена та повертає її.
  1. public __call( $name, $arguments )
  2. public __construct( $query = ” )
  3. public __get($name)
  4. public __isset($name)
  5. public fill_query_vars( $query_vars )
  6. public generate_postdata( $post )
  7. public get( $query_var, $default_value = ” )
  8. public get_posts()
  9. public get_queried_object()
  10. public get_queried_object_id()
  11. protected get_search_stopwords()
  12. public have_comments()
  13. public have_posts()
  14. public init()
  15. private init_query_flags()
  16. public is_404()
  17. public is_archive()
  18. public is_attachment( $attachment = ” )
  19. public is_author( $author = ” )
  20. public is_category( $category = ” )
  21. public is_comment_feed()
  22. public is_comments_popup()
  23. public is_date()
  24. public is_day()
  25. public is_embed()
  26. public is_favicon()
  27. public is_feed( $feeds = ” )
  28. public is_front_page()
  29. public is_home()
  30. public is_main_query()
  31. public is_month()
  32. public is_page( $page = ” )
  33. public is_paged()
  34. public is_post_type_archive( $post_types = ” )
  35. public is_preview()
  36. public is_privacy_policy()
  37. public is_robots()
  38. public is_search()
  39. public is_single( $post = ” )
  40. public is_singular( $post_types = ” )
  41. public is_tag( $tag = ” )
  42. public is_tax( $taxonomy = ”, $term = ” )
  43. public is_time()
  44. public is_trackback()
  45. public is_year()
  46. public lazyload_comment_meta( $check, $comment_id )
  47. public lazyload_term_meta( $check, $term_id )
  48. public next_comment()
  49. public next_post()
  50. protected parse_order( $order )
  51. protected parse_orderby( $orderby )
  52. public parse_query_vars()
  53. protected parse_search( &$q )
  54. protected parse_search_order( &$q )
  55. protected parse_search_terms( $terms )
  56. public parse_tax_query( &$q )
  57. public query($query)
  58. public reset_postdata()
  59. public rewind_comments()
  60. public rewind_posts()
  61. public set($query_var, $value)
  62. public set_404()
  63. private set_found_posts( $q, $limits )
  64. public setup_postdata( $post )
  65. public the_comment()
  66. public the_post()

Джерело WP_Query

список змін

З версії 1.5.0Введено.
З версії 4.5.0Removed the $comments_popup property.

Код WP_Query {} WP 6.0.2

Код занадто великий. Дивіться його тут:
wp-includes/class-wp-query.php

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

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