query_posts()
Використовується самим WordPress для отримання записів для поточної сторінки (архів авторів, окремий запис, рубрика, мітка). Визначає які посади будуть показані в базовому циклі WordPress. Створює базовий цикл WordPress. Повертає список записів (постів).
Ця функція може приймати безліч різних параметрів, які можна вказувати як у вигляді масиву, так і у вигляді рядка: cat=4&posts_per_page=5
.
Завдяки цій функції можна змінити стандартне виведення постів у WordPress. Висновок формується на основі того, яка сторінка показується (головна, архів за датою, категорія, архів автора тощо). Наприклад, можна змінити цикл так:
- Показувати лише одну посаду на головній сторінці блогу;
- Показувати останні пости лише на головній сторінці блогу;
- Змінити порядок сортування постів;
- Показувати чи показувати пости з певної категорії.
Читайте обов’язково: Використати query_posts() небезпечно
Для впровадження безпосередньо в SQL запит можна використовувати ці фільтри .
WP_Query()
Хуків немає.
Повертає
WP_Post[]|int[]
. Світовий об’єкт WP_Query.
Використання
<?php // Запит. $args - параметри запиту query_posts($args); // Цикл WordPress if( have_posts() ){ while( have_posts() ){ the_post(); // Тут оформляємо дані для кожного посту в циклі } wp_reset_query(); } else { // текст/код, якщо постів немає } ?>
Функція query_posts() повинна розташовуватись перед Циклом WordPress (The Loop), тому що при виклику query_posts створюється новий об’єкт wp_query
, який потім буде використовуватися в циклі. Після цього WordPress не враховуватиме параметри отримані через УРЛ (наприклад, номер сторінки або категорії). Якщо потрібно зберегти параметри основного запиту, можна використовувати глобальну змінну $query_string
(містить поточні параметри для query_posts).
Наприклад, давайте змінимо порядок сортування постів, при цьому не торкаючись інших параметрів запиту, для цього потрібно написати такий код перед Циклом WordPress:
Global $query_string; query_posts($query_string . "&order=ASC");
У цьому прикладі “порція” додаткових аргументів повинна бути знаком амперсанд ( &
)
Також параметри можна передати у вигляді масиву:
Global $query_string; // додаємо базові параметри в масив $args parse_str($query_string, $args); // додаємо/замінюємо параметр post_type у масиві $args['post_type'] = array('post','video'); query_posts($args);
Параметри
Параметри Категорій (рубрик)
Отримує пости, що належать до певних категорій.
-
cat
(число/рядок/масив) -
ID категорії. Можна вказати кілька ID у рядку через кому або в масиві. Щоб виключити рубрики, вкажіть мінус (-) перед ID категорії – це виключить і всі вкладені рубрики. Щоб не виключити вкладені, натисніть
category__not_in
. -
category_name
(рядок) - Назва категорії. Використовуйте слаг (альтернативне ім’я), а не саму назву категорії.
-
category__and
(масив) - Отримати посади, які входять одночасно в кілька категорій.
-
category__in
(масив) - Отримати посади, що входять до однієї із зазначених категорій.
-
category__not_in
(масив) Отримати посади, які не входять до цієї категорії.
Цей параметр не враховує вкладених рубрик. Щоб виключити рубрику та вкладені рубрики, вкажіть ID рубрик через кому зі знаком мінус у параметрі
cat
:cat=-25,-32
.
Пости з однієї категорії
Виведення постів з однієї категорії (записи з дочірніх категорій також будуть обрані):
query_posts('cat=4');
Виведення постів з однієї категорії за ярликом (альтернативною назвою категорії):
query_posts('category_name=staff');
Виведемо пости лише з категорії 4 (дочірні категорії не торкаються):
query_posts( 'category__in=4' );
Пости з кількох категорій
Виведення постів із категорій за ID категорій:
query_posts('cat=2,6,17,38');
Виведемо пости з категорій за складом категорій:
query_posts( 'category_name=staff,news' );
Виключимо пости, що належать категоріям
Виведемо всі пости, крім постів із категорій 12,34,56:
query_posts('cat=-12,-34,-56');
Показати всі пости, крім тих, що належать категорії 3:
query_posts('cat=-3');
Пости з кількох категорій одночасно
Показати пости, які знаходяться одразу у двох категоріях:
query_posts( array( 'category__and' => array(2,6) ) );
Показати посади, які знаходяться хоча б в одній із категорій (дочірні категорії не враховуватимуться):
query_posts(array('category__in' => array(2,6)));
Можна виключити кілька категорій, таким чином:
query_posts( 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_posts('tag=cooking');
Отримати пости, що мають хоча б одну вказану мітку:
query_posts('tag=bread,baking');
Пости з кількома мітками
Отримати пости, що мають будь-яку з міток:
query_posts('tag=bread,baking');
Отримати пости, що мають відразу всі вказані мітки:
query_posts('tag=bread+baking+recipe');
Отримати пости, що мають відразу дві мітки (37 та 47). Цей варіант більш кращий вищенаведеному через швидкодію.
query_posts( array('tag__and' => array(37,47)) );
Отримати пости, що мають хоча б одну мітку 37 або 47. Цей варіант краще т.к. вказуються одразу ID.
query_posts( array('tag__in' => array(37,47)) );
Отримати посади, НЕ пов’язані з мітками 37 або 47:
query_posts(array( 'tag__not_in'=>array(37,47) ));
Параметри Таксономій
Виводить посади пов’язані з певною таксономією.
-
{tax}
(рядок) -
Потрібно вказувати ім’я таксономії та склад терміна:
array('category'=>'wordpress')
. Заборонено з версії 3.1. -
tax_query
(масив) З WP 3.1. Потрібно вказати параметри запиту таксономії. Може приймати низку вкладених аргументів, це:
relation (рядок)
Як вибирати записи із зазначених таксономій. Може бути:AND
– записи, які одночасно входять у зазначені терміни таксономії.OR
– записи що належать будь-якому із зазначених термінів таксономії.
Вказується у першому масиві, а терміни у вкладених масивах, які можуть мати такі параметри:
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_posts( array( 'people' => 'bob' ) );
#2 Виведемо пости, прикріплені до терміну bob з таксономії people :
$ args = array ( 'post_type' => 'post', 'people' => 'bob' ); query_posts($args);
Зробимо те саме, що і в прикладі вище, тільки з використанням аргументу tax_query
:
query_posts(array( 'tax_query' => array( array( 'taxonomy' => 'people', 'field' => 'slug', 'terms' => 'bob' ) ) )));
#3 Висновок із кількох таксономій
Виведемо пости з кількох довільних таксономій:
query_posts(array( 'post_type' => 'post', 'people' => 'bob', 'language' => 'english' )));
Аналог прикладу вищий. Виведемо записи, які одночасно відносяться до кількох довільних таксономій через tax_query
:
query_posts([ '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_posts([ '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_posts( [ '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_posts($args);
Використання get_posts()
#6 Виведемо заголовки всіх типів записів countries
з усіх підрубрик терміна 62, який відноситься до таксономії country
:
$ args = array ( 'tax_query' => array( array( 'taxonomy' => 'country', 'field' => 'id', 'terms' => array( 62 ) ) ), 'post_type' => 'countries', 'posts_per_page' => -1 ); $posts = get_posts($args); 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 = array('term-slug', 'term-slug-two', 'term-slug-three'); $ pst = get_posts (array ( 'posts_per_page' => -1, 'post_type' => $post_type, 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => $tax, 'terms' => $terms, 'field' => 'slug', 'operator' => 'NOT IN', ) ), '' => '', ))); $i = 0; foreach( $psts as $pst ){ echo ++$i . ' <a href="'. get_permalink( $pst->ID ) .'">'. $pst->post_title .'</a><br>'; }
#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>'; }
Параметри Авторів
Отримує посади, що належать певним авторам.
-
author
(число) - ID автора.
-
author_name
(рядок) -
Нік автора. Потрібно вказувати значення поля
user_nicename
. -
author__in
(масив) - Масив ID авторів, записи яких потрібно отримати.
-
author__not_in
(масив) - Масив ID авторів, записи яких потрібно виключити.
#1 Виведемо пости для одного автора
Пости за ID автора:
query_posts( 'author=123' );
Пости з ніку автора:
query_posts( 'author_name=rami' );
#2 Виведемо пости кількох авторів відразу
Пости чотирьох авторів за ID:
query_posts( 'author=2,6,17,38');
#3 Виключимо пости автора
Виключимо пости автора 12 і покажемо всі пости, крім його:
query_posts( 'author=-12');
#4 Ще приклад
Показати всі сторінки автора 1 (author=1), відсортувати за заголовком (orderby=title) за абеткою (order=ASC) і не показувати прикріплені пости вгорі.
query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');
#5 Кілька авторів одночасно
Отримаємо всі записи авторів з ID 2 та 6:
query_posts( array( 'author__in' => array( 2, 6 ) ) );
Отримаємо записи всіх авторів, крім авторів з ID 2 та 6:
query_posts( 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
(число) - Поверне лише дочірні сторінки.
-
post_parent__in
(масив) - Вибере пости батьки яких вказані у масиві.
-
post_parent__not_in
(масив) - Вибере пости батьки яких не зазначені у масиві.
-
post__in
(масив) Вкажіть через кому ID постів, які потрібно отримати (post__in=5,12,2,14,7).
Примітка: якщо є записи, вони будуть включені автоматично. Вимкнути їх можна параметром
ignore_sticky_posts
.-
post__not_in
(масив) - Вибере всі посади крім зазначених.
-
post_name__in
(масив) - Вибере вказані пости. Вказувати потрібно post_name (slug) через кому або в масиві. З версії 4.4.
Пости/сторінки за ID
Виведемо пост за ID:
query_posts('p=7');
Виведемо сторінку за ID:
query_posts( 'page_id=7' );
Пости/сторінки по Слагу
Виведемо піст по Слагу:
query_posts( 'name=about-my-life');
Виведемо сторінку по Слагу:
query_posts( 'pagename=contact' );
Дочірні пости/сторінки
Виведемо дочірню сторінку, використовуючи склад батьківської та дочірньої сторінки розділені слешем: parent_slug/child_slug
query_posts( 'pagename=contact_us/canada&post_type=page' );
Виведемо дочірні сторінки, використовуючи батьківський ID:
query_posts( 'post_parent=93&post_type=page' );
Виведемо сторінки верхнього рівня, виключимо всі дочірні:
query_posts( 'post_parent=0&post_type=page' );
Виведемо пости, батьки яких вказані в масиві:
query_posts( array( 'post_parent__in' => array( 2, 5, 12, 14, 20 ) ) ));
Численні висновки постів/сторінок
Виведемо лише зазначені пости:
query_posts( array( 'post_type'=>'page', 'post__in' => array( 2, 5, 12, 14, 20 ) ) );
Виведемо всі посади, крім зазначених:
query_posts(array( 'post_type' => 'post', 'post__not_in' => array( 2, 5, 12, 14, 20 ) )));
Примітка: не можна об’єднувати post__in та post__not_in в одному запиті.
Не використовуєте рядок з ID розділеними комами, так працювати не буде. Потрібно передавати готовий масив:
// не правильно $exclude_ids = '1,2,3'; query_posts( array( 'post__not_in' => array( $exclude_ids ) ) ); // Правильно $exclude_ids = array(1, 2, 3); query_posts( array( '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_posts( 'post_type=page' );
Виведемо всі пости, крім ревізій та типів постів, у яких при реєстрації параметр exclude_from_search виставлений у true:
query_posts( 'post_type=any' );
Виведемо 4 типи постів одночасно:
query_posts(array( 'post_type' => array( 'post', 'page', 'movie', 'book' ) )));
Параметри довільних полів (postmeta)
Основним параметром для роботи з мета-даними в WP_Query є те meta_query
, що отримує записи (пости) за існуючими у них довільними полями та їх значеннями. За принципом використання, meta_query схожий на tax_query – масив, де кожен елемент своє чергу є масивом з параметрами запиту, тобто. meta_query – це масив масивів:
$ args = array ( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue' ), array( 'key' => 'price', 'value' => 20 ) ) );
Така конструкція дозволяє використовувати численні запити. Перший параметр relation у “зовнішньому” масиві визначає логічний зв’язок між запитами. Він може приймати значення AND (використовується за замовчуванням. Збіг з усіма запитами) або OR (збіг з будь-яким із запитів).
Старі змінні запиту мета-даних: meta_key
, meta_value
, meta_value_num
, meta_compare
як і раніше, підтримуються і можуть бути використані для простих запитів пов’язаних з довільними полями.
Список всіх параметрів пов’язаних з мета-даними:
-
meta_key
(рядок) - Ключ(назва) довільного поля.
-
meta_value
(рядок) - Значення довільного поля.
-
meta_value_num
(число) - Значення довільного поля, число.
-
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.
У масиві можна вказати такі параметри:relation (рядок)
Цей параметр вказується як рядок у головному масиві meta_query і вказує як порівнювати між собою кілька масивів із параметрами запиту, вказаних у цьому головному масиві.
Параметр може приймати два значення:
OR
– вибрати мета-поля відповідні хоти під один масив з параметрами запиту;
AND
(за замовчуванням) – вибрати мета поля, придатні для всіх масивів з параметрами запиту.key (рядок)
Ключ поля.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’, якщо масив value, ‘=’ в інших випадках.
type (рядок)
тип довільного поля (якщо, наприклад, у полі вказуються лише числа то потрібно використовувати NUMERIC, щоб числа не порівнювалися як рядки). Може бути:NUMERIC
– цілі числаDECIMAL
– дробові числаSIGNED
– цілі числа, позитивні та негативніUNSIGNED
– цілі числа, лише позитивніCHAR
– рядок не чутливий до регіструBINARY
– рядок чутливий до регіструDATETIME
– дата і часDATE
– лише датаTIME
– Тільки час
За замовчуванням:
CHAR
.
Тип
DATE
працює при порівнянніBETWEEN
тільки якщо дата вказується у форматі YYYY-MM-DD та порівнюється з аналогічним форматом.
Дивіться також окремий опис класу мета запитів: 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_posts( 'meta_key=color' );
#2 Пости зі значенням довільно поля blue, не зважаючи на назву ключа.
query_posts( 'meta_value=blue' );
#3 Пости з ключем поля color та значенням цього поля blue:
query_posts( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
#4 Пости у яких ключ дорівнює color і значення поля не дорівнює blue:
query_posts( array( 'meta_key' => 'color', 'meta_value' => 'blue', 'meta_compare' => '!=' ) );
#5 Продукти з ключем price та значення довільно поля менше або дорівнює 22.
При використанні параметра “meta_value” значення 99 буде більшим за 100, оскільки ці значення розпізнаються як рядки, а не числа. Для того, щоб числа розумілися як числа, потрібно використовувати параметр “meta_value_num”:
query_posts( array( 'meta_key' => 'price', 'meta_value_num' => '22', 'meta_compare' => '<=', 'post_type' => 'product' ) );
#6 Пости зі значенням довільного поля рівним 0, не має значення який ключ.
query_posts(array ('meta_value' => '_wp_zero_value'));
Приклади з використаннямmeta_query
#1 Записи з одним довільним полем
Виведемо продукти (product) у яких ключ дорівнює color і значення поля не дорівнює blue:
$ args = array ( 'post_type' => 'product', 'meta_query' => array( array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ) ) ); query_posts($args);
Примітка: для meta_query потрібно вказувати масив у масиві, навіть якщо ви задаєте один запит.
#2 Записи, що мають одночасно два довільні поля
Приклад виведення постів з кількома довільними полями та вказівкою різних умов значень цих довільних полів:
$ args = array ( 'post_type' => 'product', 'meta_query' => array( array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); query_posts($args);
#3 Записи мають хоча б одне поле
Виведемо пости з ключем color та значенням не (NOT LIKE) blue або (OR) пости з ключем price зі значеннями поля від 20 до 100:
$ args = array ( 'post_type' => 'product', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); query_posts($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_posts($args);
#5 Отримаємо записи у яких є довільне поле
Цей приклад показує, як отримати записи для яких встановлені мініатюри (які мають довільне поле _thumbnail_id ):
$ args = array ( 'posts_per_page' => 3, 'post_type' => 'post', 'meta_query' => array( array( 'key' => '_thumbnail_id', 'compare' => 'EXISTS' ) ) ); query_posts($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_posts($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_posts($args);
Параметри MIME Типів записів
Вибирає вкладення із зазначеним міме типом. Список мімі типів дивіться в описі wp_get_mime_types() .
-
post_mime_type
(рядок/масив) Міме тип запису. Використовується тільки для вкладень записів з типом ‘attachment’.
Цей параметр буде працювати тільки коли параметр
post_type = attachment
іpost_status = inherit
. Тобто. міме-тип може бути лише у вкладень.
Отримаємо лише картинки будь-якого типу
query_posts(array( 'post_mime_type' => 'image', 'post_type' => 'attachment', 'post_status' => 'inherit', )));
Отримаємо тільки картинки gif типу
query_posts(array( 'post_mime_type' => 'image/gif', 'post_type' => 'attachment', 'post_status' => 'inherit', )));
Отримаємо всі типи вкладень, крім картинок
query_posts(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_posts( 'post_status=draft');
Отримаємо пости з різними статусами:
query_posts( array( 'post_status' => array( 'pending', 'draft', 'future' ) ) );
Отримаємо всі види вкладень:
query_posts( 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
(число/масив) – рік, наприклад 2013dayofyear
(число / масив) – номер дня на рік, 1-366.month
(число / масив) – місяць, 1-12week
(число / масив) – тиждень, 0-53day
(число / масив) – день, 1-31dayofweek
(число/масив) – день тижня, 1-7, де 1 – неділяdayofweek_iso
(число/масив) – день тижня, 1-7, де 1 – понеділокhour
(число / масив) – година, 0-23minute
(число / масив) – хвилина, 0-60second
(число / масив) – секунда, 0-60
У параметрах: year , month , week , dayofyear , day , dayofweek , dayofweek_iso , hour , minute , second можна вказати кілька значень, як масиву, якщо параметр compare відповідає.
#1. Отримаємо пости за сьогодні:
$Today = getdate(); query_posts( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );
#2. Отримаємо пости за останній тиждень:
$week = date('W'); $year = date('Y'); query_posts( 'year=' . $year . '&w=' . $week );
#3. Отримаємо пости за 20 грудня:
query_posts( 'monthnum=12&day=20');
Примітка: запити вище повертають пости за вказаний період історії: “Пости за Х місяць, Х день”. Вони не можуть отримувати посади за довільний проміжок часу по відношенню до сьогодення. Тому запити типу “Пости за останні 30 днів” або “Пости за останній рік” не можливі у базовому варіанті, для таких запитів потрібно використовувати фільтр “posts_where”. Приклади нижче показують, як це робити.
#4. Отримаємо пости за проміжок часу з 1 березня до 15 березня 2010 року:
// Створимо нову функцію яка додасть умову where на запит function filter_where( $where = '' ) { // з 1 березня по 15 березня 2010 року $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'"; return $where; } add_filter( 'posts_where', 'filter_where'); query_posts($query_string); remove_filter( 'posts_where', 'filter_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_posts($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_posts($query_string); remove_filter( 'posts_where', 'filter_where');
Параметр “m” може бути встановлений лише у списку постів в адмін-панелі. Він корисний коли ви вибираєте з випадаючого списку select де дата встановлена як YYYYmm число.
Приклади з параметром date_query
#1. Отримаємо пости між 9 та 17 годинами:
$ args = array ( 'date_query' => array( array( 'hour' => 9, 'compare' => '>=', ), array( 'hour' => 17, 'compare' => '<=', ), array( 'dayofweek' => array( 2, 6 ), 'compare' => 'BETWEEN', ), ), 'posts_per_page' => -1, ); query_posts($args);
#2. Отримаємо пости за проміжок часу: 1 січня по 28 лютого:
$ args = array ( 'date_query' => array( array( 'after' => 'January 1st, 2013', 'before' => array( 'year' => 2013, 'month' => 2, 'day' => 28, ), 'inclusive' => true, ), ), 'posts_per_page' => -1, ); query_posts($args);
Дати можна вказувати цифрами та рядками, як видно з цього прикладу, тому що аргументи before та after обробляються функцією PHP strtotime() , а вона розуміє рядки.
#3. Отримаємо пости, опубліковані рік тому, але змінені в останній місяць:
$ args = array ( 'date_query' => array( array( 'column' => 'post_date_gmt', 'before' => '1 рік тому', ), array( 'column' => 'post_modified_gmt', 'after' => '1 місяць тому', ), ), 'posts_per_page' => -1, ); query_posts($args);
#4. Отримаємо пости за останні 2 тижні, використавши рядок ‘2 weeks ago’:
query_posts(array( 'date_query' => array( 'after' => '2 weeks ago', ), )));
#5. Отримаємо записи за останні 2 місяці, опубліковані у будні дні:
query_posts(array( 'date_query' => array( 'after' => '2 місяці тому', array( 'dayofweek' => array( 1, 5 ), 'compare' => 'BETWEEN', ), ), )));
Аргумент date_query працює і з класом WP_Comment_Query, тому його точно також можна використовувати функції: get_comments() .
Параметри Відступів
Можна відступити від першого посту в результатах запиту. Наприклад, стандартно запит повертає 6 постів, а якщо до того ж запиту додати параметр offset=1
, то буде повернено 5 постів (перший пост із запиту буде пропущено).
-
offset
(число) - Скільки постів із результатів запиту пропустити.
Приклад використання
Пропустимо перший/один пост (offset=1) і повернемо наступні 5:
query_posts('posts_per_page=5&offset=1');
Параметри Сортування та порядку
Сортує та встановлює напрямок сортування.
-
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.0parent
– Сортування за значенням поля parent.rand
– Випадковий порядок.RAND(x)
– У випадковому порядку для числових значень. Тут “x” – це ціле число.comment_count
– Сортування за кількістю коментарів. З версії 2.9.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 .post_name__in
– Враховує порядок зазначених імен у параметрі post_name__in .
- orderby = array()
З версії WordPress 4.0 в orderby можна вказувати масив, що поєднує в собі обидва параметри: orderby і order . Зроблено це для сортування за декількома колонками одночасною Синтаксис такий:
'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
#1 Сортування за заголовком
query_posts( array ( 'orderby' => 'title', 'order' => 'DESC' ) );
Відсортуємо по порядку в меню, а потім по заголовку
query_posts( array ( 'orderby' => 'menu_order title', 'order' => 'DESC' ) );
#2 Виведемо один випадковий пост:
query_posts( array ( 'orderby' => 'rand', 'posts_per_page' => '1' ) );
#3 Відсортуємо пости за кількістю коментарів:
query_posts( array( 'orderby' => 'comment_count' ) );
#4 Відсортуємо товари за ціною (довільне поле price):
query_posts( array ( 'post_type' => 'product', 'orderby' => 'meta_value_num', 'meta_key' => 'price' ) );
#5 Множинне сортування
Виведемо пости відсортовані за двома полями: ‘title’ і ‘menu_order’ (title першорядний):
query_posts( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' ) );
#6 Множинне сортування з використанням масиву (з версії 4.0)
Отримаємо сторінки відсортовані за заголовком (title) та номером меню (menu_order) у різному порядку (ASC/DESC):
query_posts( array( 'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' ) ) ));
#7 Сортування за ‘meta_value’ для нового типу посту (post_type)
Виведемо пости типу my_custom_post_type відсортовані за ключом довільного поля “age” і відфільтровані, щоб показувалися тільки пости зі значенням поля 3 і 4:
$ args = array ( 'post_type' => 'my_custom_post_type', 'meta_key' => 'age', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'age', 'value' => array(3, 4), 'compare' => 'IN', ) ) ); query_posts($args);
Параметри Пагінації
-
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
(число) -
Скільки постів пропустити зверху вибірки (верхній відступ).
Увага: Встановлення цього параметра переписує/ігнорує параметр “paged” і ламає пагінацію (
вирішення проблеми ). -
paged
(число) -
Номер сторінки пагінації. Показує пости, які у звичайному режимі мали бути показані на сторінці пагінації Х. Переписує параметр
posts_per_page
-
page
(число) -
Номер статичної домашньої сторінки. Показує записи, які у звичайному режимі мали бути показані сторінці пагінації
Х головної статичної сторінці (front page). -
ignore_sticky_posts
(логічний) Ігнорувати приліплені пости чи ні (true/false). З версії 3.1. Замінює параметр caller_get_posts.
Приліплені пости не показуватимуться на початку списку, але вони не виключаються і виводитимуться у звичайному порядку.
#1 Пости на сторінці
Виведемо 3 посади на сторінці:
query_posts( 'posts_per_page=3');
Виведемо всі посади на сторінці:
query_posts( 'posts_per_page=-1');
Виведемо всі пости та відключимо пагінацію:
query_posts('nopaging=true');
#2 Відступи зверху
Виведемо пости починаючи з четвертого (пропустимо перші 3):
query_posts( 'offset=3' ) );
Виведемо 5 постів, які йде за трьома останніми:
query_posts( array( 'posts_per_page' => 5, 'offset' => 3 ) );
#3 Записи зі сторінки пагінації 6
query_posts( 'paged=6' );
#4 Записи з поточної сторінки
Покажемо пости з поточної сторінки пагінації. Корисно при побудові довільної пагінації:
query_posts(array('paged' => get_query_var('paged'))));
Виведемо пости з поточної сторінки та встановимо параметр paged у 1, коли змінна не визначена на першій сторінці пагінації:
$paged = (get_query_var('paged')) ? get_query_var('paged'): 1; query_posts(array('paged' => $paged));
Використовуйте get_query_var('page');
, якщо потрібно отримати номер сторінки пагінації для статичної головної сторінки сайту ( is_front_page() ). Змінна page раже містить номер пагінації на окремих сторінках типу post, коли в контенті використовується тег <!--nextpage-->
для розбиття контенту на сторінки.
Виведення поточної сторінки пагінації на статичній головній сторінці:
$paged = (get_query_var('page'))? get_query_var('page'): 1; query_posts(array('paged' => $paged));
#5 Приліплені записи (пости)
# Всі приліплені записи
$sticky = get_option('sticky_posts'); query_posts(('post__in'=>$sticky);
# Тільки перший приліплений піст
$sticky = get_option('sticky_posts'); query_posts( 'p=' . $sticky[0] );
# Перший приліплений піст, якщо такого посту немає, то останній опублікований
$ args = array ( 'posts_per_page' => 1, 'post__in' => get_option( 'sticky_posts' ), 'ignore_sticky_posts' => 1 ); query_posts($args);
# Перший приліплений піст, якщо такого посту немає, то нічого не виводимо
$sticky = get_option('sticky_posts'); $ args = array ( 'posts_per_page' => 1, 'post__in' => $sticky, 'ignore_sticky_posts' => 1 ); query_posts($args); if ( $sticky[0] ) { // формуємо висновок... }
# 5 останніх приліплених записів
$sticky = get_option('sticky_posts'); // всі Sticky записи rsort($sticky); // відсортуємо – нові вгорі $ sticky = array_slice ($ sticky, 0, 5); // Отримаємо перші 5 query_posts( array( 'post__in'=>$sticky, 'ignore_sticky_posts'=>1 ) );
#6 Приховування приліплених постів
Виключимо всі приліплені пости із запиту:
query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ) ) ));
Виключимо приліплені пости із категорії. Поверне всі пости рубрики, але приліплені пости не будуть зверху, вони виводяться як звичайні пости (за датою):
query_posts( array( 'ignore_sticky_posts' => 1, 'posts_per_page' => 3, 'cat' => 6 );
Виключимо приліплені пости із категорії. Поверне всі посади рубрики, але приліплені посади будуть повністю виключені. Також додамо сюди правило для правильної пагінації:
$paged = get_query_var('paged')? get_query_var('paged'): 1; $sticky = get_option('sticky_posts'); $ args = array ( 'cat' => 3, 'ignore_sticky_posts' => 1, 'post__not_in' => $sticky, 'paged' => $paged ); query_posts($args);
Параметри коментарів
У об’єкт WP_Query додаються дані коментарів запису, якщо це окремий запис. У нижченаведених параметрах вказується як потрібно отримувати коментарі в таких випадках.
-
comment_status
(рядок) - Статус коментарів.
-
ping_status
(число) - Статус пінгу.
-
comments_per_page
(число) -
Кількість коментарів для отримання на окремій сторінці коментарів. За замовчуванням опція:
comments_per_page
. -
comment_count
(число/масив) Кількість коментарів, що має мати пост. З версії 4.9.
- Якщо вказати число, отримає пости із зазначеним числом коментарів (оператор пошуку
=
). - Масив дозволяє вказати варіант порівняння кількості коментарів. У масиві можна вказати параметри:
- value (число) – кількість коментарів для порівняння.
- compare (рядок) – як порівнювати кількість коментів. Можливо:
=
,!=
,>
,>=
,<
,<=
. За замовчуванням:=
.
- Якщо вказати число, отримає пости із зазначеним числом коментарів (оператор пошуку
Параметри пошуку
-
s
(рядок) - пошукова фраза.
-
exact
(логічний) -
true – шукати за точною фразою вказаною в параметрі
s
.
Типово: false
Пости знайдені за пошуковою фразою.
query_posts('s=keyword');
Параметри Доступу
Показує посади, якщо користувач має достатні права.
-
perm
(рядок) - Доступ користувача.
Виведемо опубліковані приватні пости, якщо користувач має достатні для перегляду права:
query_posts( array( 'post_status' => array( 'publish', 'private' ), 'perm' => 'readable' ) );
Параметри кешування
Не додає дані до кешу під час виконання запитів.
-
cache_results
(логічний) - Чи кешувати інформацію про пост.
-
update_post_meta_cache
(логічний) - Чи кешувати інформацію про мета даних посту.
-
update_post_term_cache
(логічний) - Чи кешувати інформацію про прив’язку посту до термінів та таксономій.
#1 Виведемо 50 постів, але не буде додавати інформацію про посади в кеш:
query_posts( array( 'posts_per_page' => 50, 'cache_results' => false ) );
#2 Виведемо 50 постів, але не будемо додавати мета дані посту в кеш
query_posts( array( 'posts_per_page' => 50, 'update_post_meta_cache' => false ) );
#3 Виведемо 50 постів, але не будемо додавати до кешу інформацію про терміни постів
query_posts( array( 'posts_per_page' => 50, 'update_post_term_cache' => false ) );
Зазвичай ці функції використовувати не потрібно – кеш необхідний! Однак такий підхід може стати в нагоді в ряді випадків. Наприклад, якщо нам потрібно отримати список заголовків постів і не потрібна інша інформація про посади: ні про таксономії ні про мета даних. Не завантажуючи цю інформацію, ми можемо зберегти час на непотрібних SQL запитах.
Примітка: якщо використовується плагін постійного кешування, всі ці прапори встановлюються в false за замовчуванням, оскільки немає потреби оновлювати кеш під час кожного завантаження сторінки.
Параметри даних, що повертаються
Встановлює, які дані повинен повертати запит.
-
fields
(рядок/масив) Які дані повертати. За замовчуванням повертаються усі.
ids
– Поверне масив з ID постів.id=>parent
– Поверне асоціативний масив [parent => ID, …].- Вставляючи будь-які інші параметри, поверне всі поля (за замовчуванням) – масив об’єктів постів.
-
no_found_rows
(логічний) -
true – не підраховувати кількість знайдених рядків. У деяких випадках може пришвидшити запит.
Типово: false
Комбінування параметрів
#1. Комбінування у рядку
Ви, напевно, помітили, що параметри з’єднуються між собою символом амперсанд – &, саме цим символом параметри комбінуються (об’єднуються).
query_posts('cat=3&year=2004');
#2. Комбінування зі змінними
Пости з категорії 13 за поточний місяць на головній сторінці блогу:
if ( is_home() ) { query_posts( $query_string . '&cat=13&monthnum=' . date( 'n', current_time('timestamp') ) ); }
#3. Комбінування масивом
Поверне лише 2 пости, з категорії 1 та 3, відсортовані у зворотному порядку за заголовком:
query_posts(array( 'category__and' => array(1,3), 'posts_per_page' => 2, 'orderby' => 'title', 'order' => 'DESC', ));
#4. Записи з категорії та з міткою
Вивести всі пости з категорії 1
, що мають мітку apples
:
query_posts( 'cat=1&tag=apples' );
Приклади
#1 На головній виключимо пости з рубрики 3
Для цього краще використовувати хук pre_get_posts .
Щоб на головній сторінці блогу виключити пости, що знаходяться в категорії 3, потрібно вставити наступний код у файл front-page.php
або home.php
перед початком Цикл WordPress:
if ( is_home() ) { query_posts('cat=-3'); }
Можна додати ще кілька категорій до виключення:
if ( is_home() ) { query_posts("cat=-1,-2,-3"); }
#2 Отримаємо тільки першу частину контенту$more = 0
Якщо потрібно використовувати функцію “читати далі” (read more) з новим запитом, потрібно переключити глобальну змінну $more
на 0
:
<?php // retrieve one post with an ID of 5 query_posts('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(); // content of the post the_content('Read the full post''); } ?>
#3 Передача параметрів у масиві
Параметри можна також передати у вигляді масиву. Так вони будуть наочнішими і читанішими. Наприклад, приклад 2 можна записати так:
query_posts([ 'cat' => 22, 'year' => $current_year, 'monthnum' => $current_month, 'order' => 'ASC', ]);
Як бачите, тут можна поставити кожну змінну на окремий рядок, а це більш зрозуміло і читаємо.
#4 Вставлення змінних до параметрів запиту
Можна створювати динамічні параметри запиту, якщо потрібно, щоб запит змінювався залежно від будь-яких обставин, для цього значення параметра потрібно записати в змінну, а потім змінну передати в параметри запиту, зробити це можна декількома способами:
1) Складання запиту з використанням одинарних лапок ' '
:
<?php $category_var = $cat; // задаємо змінною $category_var ID поточної категорії $query = 'cat='. $category_var. '&orderby=date&order=ASC'; // збираємо запит query_posts($query); // запускаємо запит до БД ?>
2) Складання запиту з використанням подвійних лапок" "
Змінні всередині подвійних лапок інтерпретуються PHP як змінні, а не як простий текст:
<?php $current_month = date('m'); $current_year = date('Y'); query_posts("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 постів (посилання пагінації).
3) Додавання параметрів на запит
Збереження базового запиту поточної сторінки та додавання до нього параметрів
функція query_posts повністю переписує запит, якщо, наприклад, ми напишемо query_posts ('cat=1')
, то інші параметри запиту, які використовуються для поточної сторінки (наприклад, сортування, пагінація і т.д.), будуть втрачені та будуть виведені пости категорії 1 з іншими параметрами за замовчуванням. Щоб зберегти базові параметри запиту і доповнити/замінити їх своїми, потрібно використовувати PHP функцію array_merge
(об’єднує 2 масиви в один):
global $wp_query; query_posts(array_merge( [ 'cat' => 1 ], // це параметр який додали ми $wp_query->query // це масив базового запиту поточної сторінки )));
Цей приклад по суті те ж саме, що і приклад з використанням глобальної змінної $query_string
, тільки у вигляді масиву.
#5 Отримати конкретний пост/сторінку за ID або slug
Не рекомендується використовувати query_posts() для цього, замість цього використовуйте get_post() .
Отримаємо певний пост (пост із ID = 5):
<?php query_posts( 'p=5'); ?>
Отримуємо певну сторінку (сторінку 7):
<?php query_posts( 'page_id=7' ); ?>
Отримати окрему сторінку за її назвою (ярликом):
<?php query_posts('pagename=o-saite'); ?>
Отримання дочірньої сторінки.
Для дочірніх сторінок потрібно вказувати ім’я батьківської сторінки та дочірньої сторінки. Імена розділяються слешем ( /
). Приклад:
<?php query_posts('pagename=o-saite/avtori'); ?>
–
Купити лайки в Однокласниках з оптовими знижками та гарантією Ви можете на сайті https://doctorsmm.com/ . Тут Ви знайдете різноманітність критеріїв та умов надання послуг. Так, наприклад, Ви самостійно зможете вибрати якість матеріалу та швидкість його приходу на сторінку.
нотатки
- Global. WP_Query. $wp_query WordPress Query object.
список змін
З версії 1.5.0 | Введено. |
код query_posts() query posts WP 6.0.2
function query_posts($query) { $GLOBALS['wp_query'] = новий WP_Query(); return $GLOBALS['wp_query']->query( $query ); }