Решил сделать описание для одной из самых использованных функций wordpress - query_posts() так как параметров насколько много, что порой сам забываешь их. Хотя работаешь с выборкой query_posts каждый день 🙂
Для начала нужно внести ясность, функция query_posts изменяет основной цикл wordpress и это не очень хорошо для создания новых веток WP, но для случаем когда мы действительно решились изменить основной цикл ВП это самое оно, хотя нагрузка на ваш сайт увеличится, ведь будет создан новый WP_Query. Также, функция WordPress query_posts принимает такие же параметры как, альтернативные функции для построения циклов get_posts() и WP_Query.
На вход эта функция может принимать параметры записанные в двух вариантах: как массив query_posts( array("author"=>2, "post_type"=>"post") ) или как строка query_posts("author=2&post_type=post").
Параметр query_posts | Тип данных | Описание параметра |
cat | целое число | ID категории, посты которой нужно выбрать |
category_name | строка | имя категории, посты которой нужно выбрать |
category__in | массив чисел | несколько ID категорий, посты которых нужно выбрать |
category__not_in | массив чисел | несколько ID категорий, посты которых нужно исключить из выборки |
category__and | массив чисел | несколько ID категорий, посты которых нужно выбрать, чтобы они одновременно входили во всех их |
Пример использования:
<?php query_posts("cat=2"); ?>
<?php query_posts("category_name=test1"); ?>
<?php query_posts(array("category__and"=>array(2,3,8))); ?>
<?php query_posts(array("category__in"=>array(2,5))); ?>
Исключить посты определенной категории можно вот так:
<?php query_posts($query_string."&cat=-4");?>
<?php
$args = array_merge( $wp_query->query, array( 'category__not_in' => array(4)) );
query_posts($args);
?>
к менюДля типов постов есть только один входящий параметр:
post_type (строка или массив) - какой тип записей нужно показывать: page, post, attachment, пользовательский тип.
Пример использования:
если все посты одного типа
<?php query_posts("post_type=post"); ?>
или вот так если нужно получить посты нескольких типов
<?php query_posts(array("post_type"=>array("post","page","myPostType")); ?>
Параметр query_posts | Тип данных | Описание параметра |
meta_key | строка | название произвольного поля |
meta_value | строка | значение произвольного поля |
meta_value_num | число | значение произвольного поля в числовом формате |
meta_compare | оператор SQL | оператор для проверки значения (=, !=, >, >=, <, <=) |
meta_query | массив масивов | массив параметров выборки заменяющий 4 предыдущих параметра |
Значения массива meta_query:
Параметр meta_query | Тип данных | Описание параметра |
key | строка | название произвольного поля |
value | строка | значение произвольного поля |
compare | оператор SQL | оператор для проверки значения (=, !=, >, >=, <, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, NOT BETWEEN, EXISTS , NOT EXISTS, REGEXP, NOT REGEXP, RLIKE ) |
type | строка | тип произвольного поля: NUMERIC, BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED. Позволяет делать правильное сравнение данных |
relation | строка (OR и AND) | записывается в начало массива и указывает как сравнивать последующие массивы |
Примеры использования:
<?php query_posts(array("meta_query"=>array(
"relation"=>"OR",
array("key"=>"my_param", "value"=>"4", "type"=>"NUMERIC", "compare"=>"="),
array("key"=>"my_param2", "value"=>"salon", "compare"=>"LIKE")
))); ?>
<?php query_posts(array("meta_query"=>array(array("key"=>"razmer_kvartiru", "value"=>array(40,70), "type"=>"NUMERIC", "compare"=>"BETWEEN")))); ?>
Параметр query_posts | Тип данных | Описание параметра |
p | число | ID поста, который нужно получить |
name | строка | название поста, который нужно получить |
page_id | число | ID страницы, которую мы хотим получить |
pagename | строка | название страницы |
post_parent | строка | ID родительской страницы, дочерей которой нужно получить |
post_parent__in | массив | ID родительских страниц. Получим всех дочерей для всего массива родителей |
post_parent__not_in | массив | ID родительских страниц. Получим все страницы, родители которых не указанные в массиве |
post__in | массив | ID постов, которые нужно получить |
post__not_in | массив | ID постов, которые нужно исключить из выборки |
Примеры использования значений:
<?php query_posts("p=7"); ?>
<?php query_posts("post__in=3,4,7"); ?>
Вот такой пример может не работать, в связи с недостаточной конкретикой выборки:
<?php query_posts("page_id=5"); ?>
<?php query_posts("page_id=5&post_type=page"); ?>
Вот так, можно легко исключить посты с текущей выборки. Например, если эти посты мы не хотим видеть на главной странице
<?php
$args = array_merge( $wp_query->query, array( 'post__not_in' => array(2,3,10)) );
query_posts($args);
?>
Параметр query_posts | Тип данных | Описание параметра |
orderby | строка | Поле по которому мы будем сортировать посты. Принимает такие значения: ID - по идентификаторам в базе author - по ИД автора title - по заголовку записи / страницы name - названию поста / страницы slug (по тей части что мы видим в URL) date - по дате публикации modified - по дате изменения type - по типу поста parent - по родительском ИД rand - случайный порядок (random) comment_count - по количеству комментариев meta_value - по строчному значению пользовательских полей. Должен быть указан meta_key meta_value_num - по числовому значению пользовательского поля post__in - по порядку указаном в массиве post__in |
order | строка | направление сортировки по параметру orderby. Снизу в верх или сверху вниз: DESC и ASC |
<?php query_posts("post_type=post&orderby=date&order=ASC"); ?>
Если нужно изменить текущую сортировку локально, можно использовать вот такие значения:
<?php
$args = array_merge( $wp_query->query, array( "orderby" => "comment_count", "order"=>"DESC") );
query_posts($args);
?>
Сортировка товаров от самого дешевого к самому дорогому:
<?php query_posts("post_type=tovar&meta_key=price&orderby=meta_value_num&order=ASC"); ?>
s (строка) - текст для поиска подходящих постов / страниц к меню
Параметр query_posts | Тип данных | Описание параметра |
cache_results | логический | кешировать или нет информацию: true или false |
update_post_meta_cache | логический | кешировать или нет информацию мета данных: true или false |
update_post_term_cache | логический | кешировать или нет информацию о привязке поста к терминам и таксономиям: true или false |
Параметр | Тип данных | Описание параметра |
nopaging | логический | выключить пагинацию. Выведет все посты на странице |
posts_per_page | число | количество постов на странице.Это альтернатива параметру showposts, который до сих пор работает. Если установить -1 то будут показанные все посты |
offset | число | количество постов сверху, которое нужно пропустить |
paged | число | номер страницы пагинации |
ignore_sticky_posts | логический | Игнорировать или нет прилепленные посты |
Примеры использования:
<?php query_posts("posts_per_page=15");?>
<?php query_posts("posts_per_page=15&paged=2");?>
Параметр query_posts | Тип данных | Описание параметра |
post_status | строка / массив строк |
статус поста: по умолчанию: publish |
tax_query (массив) - масив параметров выборки: к меню
Параметр tax_query | Тип данных | Описание параметра |
relation | строка (OR и AND) | записывается в начало массива и указывает как сравнивать последующие массивы |
taxonomy | строка | название таксономии |
terms | число/строка/массив | термины таксономии, из которых нужно выводить посты |
field | строка (id или slug) | указываем какие значения перечисленные в terms |
operator | оператор (IN, AND, NOT_IN) | указываем как сравнивать параметры terms |
include_children | логический | включать или нет посты с дочерних терминов |
Пример использования:
<?php query_posts(array("tax_query"=>array(
"relation"=>"OR",
array("terms"=>array(1,3,7), "field"=>"id", "taxonomy"=>"my_tax_name", "operator"=>"IN", "include_children"=>false),
array("terms"=>array("color","razmer"), "field"=>"slug", "operator"=>"IN", "include_children"=>false)
))); ?>
Параметр query_posts | Тип данных | Описание параметра |
tag | строка | slug метки |
tag_id | число | ID метки |
tag__in | массив чисел | несколько ID меток, посты которых нужно выбрать |
tag__not_in | массив чисел | несколько ID меток, посты которых нужно исключить из выборки |
tag__and | массив чисел | несколько ID меток, посты которых нужно выбрать, чтобы они одновременно входили во все перечисленные метки |
Помогите пожалуйста, ни как не могу понять в чем причина. Вывожу посты из определенной рубрики на страницы с помощью вот такого кода:
Вроде все выводится, но проблема в том, что в теме стоит эффект, при котором при наведение на картинку поста она становится серой. После моего кода, как только мышкой проводишь по сайту - сразу все картинки становятся серыми. Как это можно исправить? Тема hitchcock
Здравствуйте!
Уже второй день голову ломаю...
Подскажите как добиться вывода результатов поиска только по определенной категории? То есть хочу сделать чтобы результаты поиска были отсортированы по категориям.
Вот пример, который почему то не работает:
$s = get_search_query(); //записываем поисковую фразу в $s
$args = array( // записываем в массив данные для сортировки
's' => $s, //наша поисковая фраза
'cat' => '8' //поиск только по категории с ID = 8
);
query_posts($args); // применяем наши условия сортировки поиска
if ( have_posts() ) : while ( have_posts() ) : the_post(); //дальше пошел LOOP вывода товаров, которые нам нужны...
Но вот результатов поиска нету... уже что угодно пробовал, но query_posts не работает
+1 за удобную навигацию по параметрам query_posts.
О этой функции вордпресс только ленивы не пишет, а сделать так чтоб было удобно искать параметры - делать никто не хочет.
Настроек дофига пока колесиком докрутишь то палец сотрешь :)))
Хочу заметить, у вас не все настройки query_posts и это очень плохо.
Начал писать фильтр но не хватило параметров, пришлось искать у ваших конкурентов 🙁