Функция WordPress query_posts() и get_posts()

WordPress query_posts и get_posts

Решил сделать описание для одной из самых использованных функций wordpress - query_posts() так как параметров насколько много, что порой сам забываешь их. Хотя работаешь с выборкой query_posts каждый день 🙂

Для начала нужно внести ясность, функция query_posts изменяет основной цикл wordpress и это не очень хорошо для создания новых веток WP, но для случаем когда мы действительно решились изменить основной цикл ВП это самое оно, хотя нагрузка на ваш сайт увеличится, ведь будет создан новый WP_Query. Также, функция WordPress query_posts принимает такие же параметры как, альтернативные функции для построения циклов get_posts() и WP_Query.

query_posts входящие параметры

На вход эта функция может принимать параметры записанные в двух вариантах: как массив query_posts( array("author"=>2, "post_type"=>"post") ) или как строка query_posts("author=2&post_type=post").

 

Навигация по странице:
  1. query_posts для рубрик / категорий
  2. query_posts для типов постов
  3. произвольные поля
  4. страницы и посты
  5. сортировка и порядок
  6. query_posts для поиска
  7. кешированние
  8. query_posts и get_posts для пагинации
  9. параметры статусов
  10. параметры таксономий
  11. параметры меток

 

Параметры query_posts для рубрик / категорий к меню

Параметр 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);
?>

 

 

Параметры query_posts для типов постов

к менюДля типов постов есть только один входящий параметр:

post_type (строка или массив) - какой тип записей нужно показывать: page, post, attachment, пользовательский тип.

Пример использования:

если все посты одного типа

<?php query_posts("post_type=post"); ?>

или вот так если нужно получить посты нескольких типов

<?php query_posts(array("post_type"=>array("post","page","myPostType")); ?>

 

Параметры query_posts для произвольных полей

к меню
Параметр 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 и get_posts для страниц и постов (записей) к меню

Параметр 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"); ?>

Чтобы получить страницу с ИД шником 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

 

Параметры query_posts и get_posts для пагинации к меню

Параметр Тип данных Описание параметра
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 - опубликованный пост
pending - на модерации
draft - черновик
auto-draft - черновик wordpress. автоматическое сохранение
future - запланированный пост
private - приватный пост
inherit - ревизия
trash - удаленный пост в корзину
any - все посты

по умолчанию: 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", "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 меток, посты которых нужно выбрать, чтобы они одновременно входили во все перечисленные метки

 

Комментарии к записи «Функция WordPress query_posts() и get_posts()»:
  1. Андрей:

    Хочу заметить, у вас не все настройки query_posts и это очень плохо.
    Начал писать фильтр но не хватило параметров, пришлось искать у ваших конкурентов 🙁

  2. Андрей:

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

    Вроде все выводится, но проблема в том, что в теме стоит эффект, при котором при наведение на картинку поста она становится серой. После моего кода, как только мышкой проводишь по сайту - сразу все картинки становятся серыми. Как это можно исправить? Тема hitchcock

    • admin:

      Ответил вам на почту

  3. Николай:

    Здравствуйте!
    Уже второй день голову ломаю...
    Подскажите как добиться вывода результатов поиска только по определенной категории? То есть хочу сделать чтобы результаты поиска были отсортированы по категориям.
    Вот пример, который почему то не работает:
    $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 не работает

    • admin:

      Ответил вам на почту.
      Пока отвечал придумал вот такой вариант:
      это конечно не хорошо, и по правилам хорошего тона не желательно так жестко издеваться над query_posts и если что я вам такого не советовал :))))

      $args = array_merge( $wp_query->query, array( 'category__in'=> array(8)) );
      query_posts($args);

      а то что писали вы удалите, должно работать

  4. Павел:

    +1 за удобную навигацию по параметрам query_posts.
    О этой функции вордпресс только ленивы не пишет, а сделать так чтоб было удобно искать параметры - делать никто не хочет.
    Настроек дофига пока колесиком докрутишь то палец сотрешь :)))

Сделать заказ
Онлайн помощь по WordPress