Аргументы WP_Query: Произвольные поля. Аргументы WP_Query: статус, порядок и пагинация

Выбирает записи из базы данных по указанным критериям. На основе WP_Query работают функции get_posts() и query_posts() и все остальные запросы связанные с выбором записей из таблицы wp_posts.

Заметки по фильтрам

Можно использовать следующие фильтры для внедрения непосредственно в сам SQL запрос.

Важно: если указан параметр , то все эти хуки работать не будут!

Фильтры срабатывающие до установки запроса пагинации:
  • - изменяет SQL "WHERE"
  • posts_join - изменяет SQL "JOIN"
Фильтры срабатывающие после установки запроса пагинации:
  • - изменяет 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 - изменяет получаемые поля таблицы
  • 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 . См. register_post_status() и get_post_stati() .

    По умолчанию: "publish"

    Посты по статусам

    Получим только черновики:

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

    Получим посты с разными статусами:

    $query = new WP_Query(array("post_status" => array("pending", "draft", "future")));

    Получим все виды вложений:

    $query = new 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 для основного массива работают как параметры по умолчанию для вложенных массивов (если они есть).

      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")

        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 >= "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("Y-m-d", 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("Y-m-d", strtotime("-60 days")) . """ . " AND post_date <= "" . date("Y-m-d", 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 = array("date_query" => array(array("hour" => 9, "compare" => ">=",), array("hour" => 17, "compare" => "<=",), array("dayofweek" => array(2, 6), "compare" => "BETWEEN",),), "posts_per_page" =>

    #2. Получим посты за промежуток времени: 1 января по 28 февраля:

    Даты можно указывать цифрами и строками, потому что аргументы before и after обрабатываются функцией PHP strtotime() , а она понимает строки.

    $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 = new WP_Query($args);

    #3. Получим посты опубликованные год назад, но измененные в последний месяц:

    $args = array("date_query" => array(array("column" => "post_date_gmt", "before" => "1 year ago",), array("column" => "post_modified_gmt", "after" => "1 month ago",),), "posts_per_page" => -1,); $query = new WP_Query($args);

    #4. Получим посты за последние 2 недели, использовав строку "2 weeks ago":

    $query = new WP_Query(array("date_query" => array("after" => "2 weeks ago",),));

    #5. Получим записи за последние 2 месяца, опубликованные в будние дни:

    $query = new WP_Query(array("date_query" => array("after" => "2 months ago", array("dayofweek" => array(1, 5), "compare" => "BETWEEN",),),));

    Аргумент date_query работает и с классом WP_Comment_Query, поэтому его точно также можно использовать в функции: get_comments() .

    Параметры Отступов

    Можно установить отступ от первого поста в результатах запроса. Например, стандартно запрос возвращает 6 постов, а если в тот же запрос добавить параметр offset=1 , то будут возвращены 5 постов (первый пост из запроса будет пропущен).

    Offset(число) Сколько постов из результатов запроса пропустить.

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

    Пропустим первый/один пост (offset=1) и вернем следующие 5:

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

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

    Сортирует и устанавливает направление сортировки.

    Параметры сортировки не будут работать, если указать параметр 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 игнорируется.
    orderby = array()

    С версии 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(array ("orderby" => "rand", "posts_per_page" => "1"));

    #3 Отсортируем посты по количеству комментариев:

    $query = new WP_Query(array("orderby" => "comment_count"));

    #4 Отсортируем продукты по цене (произвольное поле price):

    $query = new WP_Query(array ("post_type" => "product", "orderby" => "meta_value", "meta_key" => "price"));

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

    Выведем посты отсортированные по двум полям: "title" и "menu_order" (title первостепенен):

    $query = new WP_Query(array("post_type" => "page", "orderby" => "title menu_order", "order" => "ASC"));

    #6 Множественная сортировка с использованием массива (с версии 4.0)

    Получим страницы отсортированные по заголовку (title) и номеру меню (menu_order) в разном порядке (ASC/DESC):

    $query = new WP_Query(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 = new WP_Query($args);

    #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(число) Сколько постов пропустить сверху выборки (верхний отступ).
    Внимание: Установка этого параметра переписывает/игнорирует параметр "paged" и ломает пагинацию (решение проблемы). paged(число) Номер страницы пагинации. Показывает посты, которые в обычном режиме должны были быть показаны на странице пагинации Х. Переписывает параметр posts_per_page page(число) Номер для статической домашней страницы. Показывает записи, которые в обычном режиме должны были быть показаны на странице пагинации Х главной статической странице (front page). ignore_sticky_posts(логический)

    Игнорировать прилепленные посты или нет (true/false). С версии 3.1. Заменяет параметр caller_get_posts.

    Прилепленные посты не будут показываться в начале списка, но они не исключаются и будут выводиться в обычном порядке.

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

    #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, когда в контенте используется тег разбиения контента на страницы .

    Вывод текущей страницы пагинации на статической главной странице:

    $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);
    # Первый прилепленный пост, если такого поста нет, то последний опубликованный
    $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)) { $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 (строка) - как сравнивать кол-во комментов. Может быть: = , != , > , >= , < , <= . По умолчанию: = .

    Параметры Поиска

    s(строка) Поисковая фраза. exact(логический) true - искать по точной фразе указанной в параметре s - без добавления % на концы поисковой фразы в SQL запрос.
    По умолчанию: false sentence(true/false) true - искать по полной поисковой фразе, прям как есть.
    false - поисковая фраза делится на слова и поиск происходит по словам из поисковой фразы.
    По умолчанию: false

    Посты найденные по поисковой фразе:

    $query = new WP_Query("s=keyword");

    Параметры Возвращаемых полей

    Устанавливает какие данные должен возвращать запрос.

    Fields(строка/массив)

    Какие данные возвращать. По умолчанию возвращаются все.

    • ids - вернет массив с ID постов.
    • id=>parent - вернет ассоциативный массив [ parent => ID, … ].
    • Вставка любых других параметров, вернет все поля (по умолчанию) - массив объектов постов.
    no_found_rows(логический) true - не подсчитывать количество найденных строк. В некоторых случаях может ускорить запрос.
    По умолчанию: 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 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 , если она еще не заполнена и возвращает её. __construct($query = "") Конструктор класса. Если переданы данные запроса, вызывает метод query() и передает ему данные.

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

  • статусу;
  • порядку;
  • пагинации.

Эти аргументы можно использовать для получения записей из базы данных, в запросах к вложениям, для изменения порядка и сортировки записей, а также указания их количества для вывода на экран, и многого другого.

Вспоминаем, как работают аргументы в WP_Query

Когда вы используете WP_Query в собственных темах оформления или плагинах, приходится включать в код четыре основных элемента:

  • Аргументы для запроса, в которых используются параметры;
  • Сам запрос;
  • Цикл;
  • Завершающий этап: сброс данных записи.

На практике это выглядит следующим образом:

have_posts()) { // начало цикла обработки данных из результатов запроса while ($query->have_posts()) { $query->the_post(); // содержимое опрашиваемой записи } } // восстановление исходных данных записи wp_reset_postdata(); ?>

Аргументы сообщают WordPress , какие данные нужно извлекать из базы данных. Давайте сосредоточим внимание на самом начале кода:

$args = array(// Аргументы для вашего запроса);

Как видно, аргументы заключены в массив.

Создаем код для аргументов

Существует определенный синтаксис инициализации аргументов в массиве:

$args = array("parameter1" => "value", "parameter2" => "value", "parameter3" => "value");

Вам следует заключать параметры и их значения в одинарные кавычки, а также использовать => между ними. Аргументы разделяются запятой. Если не соблюдать установленный синтаксис, то WordPress может опросить не все указанные вами аргументы, и в итоге на экран ничего не выведется.

Параметры статуса

Как вы знаете, WordPress задает каждой записи отдельный статус. Можно использовать параметр post_status для запросов записей с одним или несколькими статусами.

Доступны следующие аргументы:

  • publish : опубликованная запись или страница;
  • pending : запись ожидает рассмотрения;
  • draft : запись в статусе черновика;
  • auto-draft : только что созданная запись, без какого-либо контента;
  • future : запланированная запись;
  • private : запись не видна посетителям, которые не авторизовались на сайте;
  • inherit : измененная версия записи или статус для прикрепленных записей;
  • trash : запись находится в корзине;
  • any : запрашивает любой статус, за исключением тех, у которых параметр ‘exclude_from_search’ выставлен на true (например , auto-draf t или trash ).

Если вы не укажете статус в аргументах вашего запроса, WordPress по умолчанию будет ориентироваться на publish ; если пользователь авторизован на сайте, то в запросе также будут учитываться записи со статусом private . Если вы запускаете запрос от имени администратора, то WordPress также будет учитывать защищенные статусы: future , draft и pending .

Предположим, что у вас есть сайт-афиша, на котором используется собственный тип записей event , и в качестве даты публикации используется дата, на которую запланировано то или иное мероприятие. По умолчанию, WordPress не будет отображать еще не состоявшиеся события. Несмотря на то, что вы запланировали, дата публикации находится в будущем, а, значит, статус записи будет future .

Чтобы обойти эту проблему, можно использовать следующие аргументы:

$args = array("post_type" => "event", "post_status" => "future");

Этот код позволит отобразить те события, которые еще не состоялись, так как для опубликованных записей используется статус publish . Но если необходимо показать и состоявшиеся мероприятия, то нужно использовать массив, в котором указано больше одного статуса:

$args = array("post_type" => "event", "post_status" => array("future", "publish"));

Параметр post_status важен при осуществлении запросов к вложениям, потому что используется статус inherit , а не publish . Чтобы осуществить запрос всех вложений, можно использовать следующий код:

$args = array("post_type" => "attachment", "post_status" => "inherit");

Но вы можете заменить inherit на любой другой статус, который позволит получить аналогичный результат.

Параметры сортировки

Существует два параметра, которые можно использовать для сортировки записей, полученных при помощи WP_Query : order и orderby . Как вы уже поняли, order определяет порядок, в котором записи выводятся в цикле, а orderby определяет, по какому полю в базе данных они будут сортироваться.

Параметр order

Есть всего аргумента, которые можно использовать для сортировки:

ASC : по возрастанию (1, 2, 3; a, b, c ).
DESC : по убыванию (3, 2, 1; c, b, a ).

Если вы не включите аргумент для order, по умолчанию WordPress будет использовать DESC .

Параметр orderby

Вы можете сортировать записи по нескольким полям:

  • none : нет условий сортировки (доступно с версии 2.8 );
  • ID : сортировка по id записи. Не забывайте про верхний регистр;
  • author : сортировка по автору;
  • title : сортировка по заголовку;
  • name : сортировка по slug записи;
  • type : сортировка по типу записи;
  • date : сортировка по дате;
  • modified : сортировка по последней дате изменения;
  • parent : сортировка по id родительской записи/страницы;
  • rand : случайный порядок;
  • comment_count : сортировка по количеству комментариев;
  • menu_order : сортировка по порядку расположения страниц. Наиболее часто используется для страниц (здесь используется значение, которое указывается в мета-блоке при редактировании страницы ), а также для вложений (используется целое число из диалогового окна Вставка / Загрузить медиафайл ). Также можно использовать для любого типа записи с включенным параметром menu_order ;
  • meta_value : сортировка по значению мета-ключа или пользовательского;
  • поля : Будет работать только в том случае, если установлен параметр meta_key . Мета-значения сортируются по алфавиту, а не по числам (то есть 34 выведется раньше цифры 4 );
  • meta_value_num : сортировка по числовому мета-значению. Как и в случае с meta_value , в запросе должен использоваться аргумент meta_key ;
  • post__in : сохраняет сортировку по ID записей, выставленную в массиве post__in .

По умолчанию, для сортировки используется поле date . То есть, сортируется по дате публикации.

Если нужно сортировать записи по заголовку в порядке убывания, то можно использовать следующие аргументы:

$args = array("orderby" => "title", "order" => "ASC");

Сортировка по нескольким полям

Чтобы отсортировать записи по нескольким полям, нужно воспользоваться массивом с параметром orderby и с параметром order , если нужна сортировка каждого поля в разном порядке.

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

$args = array("orderby" => array("meta_value_num", "title"), "order" => "ASC", "meta_key" => "rating");

Я включила в запрос аргумент meta_key , и это позволит WordPress понять, какое произвольное поле мы используем. Это нужно делать именно потому, что WordPress хранит метаданные записей в таблице wp_postmeta , а не в wp_posts .

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

$args = array("orderby" => array("meta_value_num", "title"), "order" => array("DESC", "ASC"), "meta_key" => "rating");

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

$args = array("orderby" => array("type", "date"), "order" => array("ASC", "DESC"));

Этот код позволит осуществить сортировку по типу записи в возрастающем порядке, а затем, в рамках каждого типа записи, по дате в порядке убывания.

Параметры пагинации

Мы переходим к еще одному набору параметров, который связан с постраничным выводом контента, с пагинацией. Эти параметры помогают определять, сколько записей будет опрошено, и как будет происходить нумерация страниц.

Доступны следующие параметры:

  • nopaging (boolean ) : отображать все записи или использовать пагинацию. По умолчанию выставлено значение ‘false’ , то есть, используется постраничный вывод;
  • posts_per_page (int ) : количество записей на странице;
  • posts_per_archive_page (int ) : количество записей на странице, но только на странице архива;
  • offset (int ) : количество записей, после которого начинается вывод;
  • paged (int ) : страница в архиве, из которого выводятся страницы;
  • page (int ) : количество страниц для статичной главной страницы. Отображение записей, которые должны в обычном режиме показываться только на странице Х при включении статичной главной страницы (Front Page );
  • ignore_sticky_posts (boolean ) : игнорируем прикрепленные записи. По умолчанию используется значение false .

Количество записей и пропуск записей

Чтобы показать пять самых свежих записей, используем следующий код:

$args = array("posts_per_page" => "5");

Показываем пять самых свежих записей, за исключением самой последней опубликованной:

$args = array("posts_per_page" => "5", "offset" => "1");

Учтите, что, несмотря на то, что вы извлекаете записи из шести последних записей в базе данных, вы по-прежнему используете ‘posts_per_page’ => ‘5’ , так как именно такое количество записей должно быть отображено.

Можно создать два запроса: один для отображения самых свежих записей, а второй – для отображения еще 10 записей, за исключением той записи:

Для отображения всех записей можно использовать posts_per_page :

$args = array("posts_per_page" => "-1");

Прикрепленные записи

Обычно прикрепленные записи отображаются первыми в любом запросе. Если нужно переопределить эту установку, то воспользуйтесь параметром ignore_sticky_posts :

$args = array("posts_per_page" => "5", "ignore_sticky_posts" => true);

Приведенные выше аргументы позволят получить последние пять записей, независимо от того, являются они прикрепленными или нет.

Если нужно отобразить только прикрепленные записи, то нужно использовать функцию get_option() и аргумент post__in следующим образом:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => "5", "post__in" => $sticky);

Приведенный выше код позволит получить пять последних прикрепленных записей. Если их будет меньше пяти (например, три ), то будет выведено только доступное количество прикрепленных записей.

Пагинация в архивах

Также можно использовать параметры пагинации для того, чтобы определить, каким образом полученные записи будут распределяться по нескольким страницам архива или на страницах поисках.

К примеру, следующий код можно использовать на странице архива, чтобы вывести по 20 записей на каждую страницу:

$args = array("posts_per_archive_page" => "20");

Примечание: аргумент posts_per_archive_page переопределяет posts_per_page .

Если Вы работали с WordPress некоторое время, вы должны знать как трудно было раньше создавать списки записей на основе большого количества критериев и в то же время в соответствии со стандартами WordPress. Но за последние нескольких лет платформа прошла долгий путь. И сейчас, с помощью мощного класса WP_Query , мы можем создавать списки сообщений ни в чем себя не ограничивая.

Что такое WP_Query?

Класс WP_Query является одной из важнейших частей в движке WordPress. Среди прочего, он определяет запросы, которые вам необходимы на любой странице и выводит сообщения в соответствии с заданными критериями. Он также сохраняет много информации о запросах которые делает, что помогает при оптимизации страниц (и устранении ошибок).

WP_Query позволяет нам выполнять сложные запросы к базе данных безопасно, просто и модульным способом.

Безопасность

На протяжении всего нашего взаимодействия с этим объектом, мы указываем лишь параметры и используем функции для достижения нашей цели. Внутренние объекты сами заботятся о многих проблемах, таких как защита от SQL-инъекций и проверка использования правильного типа данных.

Простота

При использовании этого объекта нам не нужно изучать особенности нашей базы данных. Поскольку мы используем массив, чтобы передавать наши параметры, нет нужды вручную писать запросы с join или вложенные запросы, нужно просто создать массив аргументов и экземпляр класса!

Модульность

WP_Query позволяет избежать использования SQL-запросов в коде, класс использует ассоциативный массив в качестве аргумента. Это позволяет получить множество преимуществ: вы можете объединить аргументы из разных мест кода, запустить массив функций и управлять ими всевозможными способами.

Итак, начнем!

"Стандартный" цикл в WordPress

Давайте посмотрим вначале на обычный цикл, и затем создадим такой же цикл, используя WP_Query . Давайте предположим, что мы создаем файл category.php для своей темы.

if (have_posts() ) :
while (have_posts() ) :
the_post() ;
?>



endwhile ;
else :
?>
Упс, записей не найдено!
endif ;
?>

То же цикл, используя WP_Query:

$args = array ("cat" => 4 ) ;
$category_posts = new WP_Query($args ) ;

if ($category_posts -> have_posts () ) :
while ($category_posts -> have_posts () ) :
$category_posts -> the_post () ;
?>



endwhile ;
else :
?>
Упс, записей не найдено!
endif ;
?>

Как вы можете видеть, на первый взгляд нет большой разницы! Давайте рассмотрим его подробнее:

Построение запросов

На странице категории мы хотим получить список сообщений из этой категории. Так как мы строим запрос с нуля, используя WP_Query, мы должны определить это сами. Мы немного углубимся в это чуть позже.

Создание экземпляра класса и запросов для сообщений

С помощью экземпляра класса и массива аргументов, WP_Query будет пытаться получить указанные сообщения.

Создание цикла

Вы можете использовать любые обычные функции, только не забудьте использовать их в качестве методов объекта:

Вместо have_posts() , используйте $category_posts->have_posts() .
Вместо the_post() , используйте $category_posts->the_post() .

После того как вы сделали всё что указано выше, вы можете использовать любые теги шаблонов, которые мы знаем и любим.

Если вы посмотрите на это подробнее, то вы увидите, что глобальный объект $post также доступен. Это означает, что если вы используете пользовательский цикл, что-нибудь может пойти не так. Обязательно сохраните первоначальное значение объекта $post и восстановите его после цикла.

Идем дальше...

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

Очень часто пользователи вашей темы хотят видеть на своих сайтах великолепно выглядящие слайдеры, но они могут быть немного ленивы при создании контента. Многие пользователи также хотят показать будущие записи, которые планируется опубликовать. Давайте создадим запрос для получения предстоящих (т.е. неопубликованых) сообщений, которые имеют изображение.

$args = array (
"post_status" => "future" ,
"meta_query" => array (
array (
"key" => "_thumbnail_id" ,
"value" => "" ,
"compare" => "!="
)
) ;
$slider_posts = new WP_Query($args ) ;
?>

have_posts () ) : ?>


have_posts () ) : $slider_posts -> the_post () ?>




Короткий и совершенно понятный код - просто и красиво.

Значения по умолчанию

Вы, возможно, заметили, что я не уточнил количество необходимых записей в моём запросе. А сколько сообщений в списке? И что за статус поста в первом запросе, который мы сделали?

Значения по умолчанию устанавливаются для многих из наиболее распространенных аргументов. Вот несколько, которые вы не обязаны указывать, если только вы не хотите изменить их:

posts_per_page
По умолчанию используется значение, указанное в параметрах сайта о количестве сообщений на странице.

post_type
По умолчанию используется post .

post_status
По умолчанию используется publish .

Вы можете найти полный список параметров в документации !

Массивы

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

Вы можете использовать массив для post_status , чтобы получить сообщения с различными статусами. Обратите внимание, что вы можете использовать строку any , чтобы получить сообщения со всевозможными статусами.

Работаем с метаданными

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

Представим, что мы создаем тему WordPress, которая будет использоваться для сайта сдающего квартиру(ы) в аренду. Мы будем хранить квартиры в пользовательском типе записей и использовать мета-данные для хранения дополнительной информации. Таким образом, мы можем легко получать, например, все квартиры, которые могут вместить четырех или более человек, или те у которых есть балкон, или только квартиры на сутки с джакузи.

$args = array (
"post_type" => "apartment" ,
"meta_query" => array (
"relation" => "AND" ,
"=" => "="
)
) ;
?>

Чтобы узнать больше о параметрах, которые можно использовать, просто зайдите в раздел Custom Field Parameters в документации по WP_Query.

Методы и свойства

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

$query
Показывает строку запроса, которая передается в объект $wp_query. Это очень полезно для устранения неполадок в некоторых случаях.

$query_vars
Показывает ассоциативный массив аргументов, которые вы передали. Если вы делаете много смешиваний и сопоставлений перед передачей аргументов, этот инструмент может быть полезным, чтобы проверить, что все передано правильно.

$post
Содержит запрошенные записи из базы данных.

$found_posts
Удобная вещь, которая показывает общее число найденных элементов (без ограничения установленного аргументом posts_per_page).

С большой силой приходит большая ответственность

WP_Query дает вам большие возможности, но у него есть свои недостатки. Многие люди "сходят с ума", когда они понимают, как легко можно вызывать запросы повсюду.

Имейте в виду, что чем больше запросов, тем больше нагрузка на сервер. При создании сложных запросов могут возникнуть проблемы с RAM на хостинге, которая, вероятно, является ограниченным ресурсом у вас.

Убедитесь в том, что запрос по умолчанию выполняется на каждой странице. Какой смысл в создании нового запроса для получения последних сообщений на главной странице, если он там есть по умолчанию? Используйте кэширование результатов, чтобы снизить нагрузку на сервер.


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим

init() Initialise the object, set all properties to null, zero or false. parse_query($query) Takes a query string defining the request, parses it and populates all properties apart from $posts , $post_count , $post and $current_post . parse_query_vars() Reparse the old query string. get($query_var) Get a named query variable. set($query_var, $value) Set a named query variable to a specific value. &get_posts() Fetch and return the requested posts from the database. Also populate $posts and $post_count . Note: This is called during construction if WP_Query is constructed with arguments. It is not idempotent and should not be called more than once on the same query object. Doing so may result in a broken query. next_post() (to be used when in ) Advance onto the next post in $posts . Increment $current_post and set $post to the (new) current post object (note: this does not set the global $post variable, only the WP_Query object"s instance variable.) Returns the current post object (This is deprecated pleases use "next_post_link()") the_post() (to be used when in ) Advance onto the next post, and set the global $post variable. have_posts() (to be used when in , or just before The Loop) Determine if we have posts remaining to be displayed. Calls rewind_posts() and returns false if don"t have posts remaining. Because of the rewind, you can"t rely on have_posts() staying false. See . rewind_posts() Reset $current_post and $post . &query($query) Call parse_query() and get_posts() . Return the results of get_posts() . get_queried_object() Set $queried_object if it"s not already set and return it. get_queried_object_id() Set $queried_object_id if it"s not already set and return it. WP_Query($query = "") (constructor) If you provide a query string, call query() with it.

Parameters

Author Parameters

Show posts associated with certain author.

  • author (int | string ) - use author id or comma-separated list of IDs.
  • author_name (string ) - use " user_nicename " - NOT name.
  • author__in (array
  • author__not_in (array ) - use author id (available since ).

Show Posts for one Author

Display posts by author, using author id:

$query = new WP_Query(array("author" => 123));

Display posts by author, using author " user_nicename ":

$query = new WP_Query(array("author_name" => "rami"));

Show Posts From Several Authors

Display posts from several specific authors:

$query = new WP_Query(array("author" => "2,6,17,38"));

Exclude Posts Belonging to an Author

Display all posts except those from an author(singular) by prefixing its id with a "-" (minus) sign:

$query = new WP_Query(array("author" => -12));

Multiple Author Handling

Display posts from multiple authors:

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

You can also exclude multiple author this way:

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

Category Parameters

Show posts associated with certain categories.

  • cat (int ) - use category id.
  • category_name (string ) - use category slug.
  • category__and (array ) - use category id.
  • category__in (array ) - use category id.
  • category__not_in (array ) - use category id.

Show Posts for One Category

Display posts that have this category (and any children of that category), using category id:

$query = new WP_Query(array("cat" => 4));

Display posts that have this category (and any children of that category), using category slug:

$query = new WP_Query(array("category_name" => "staff"));

Display posts that have this category (not children of that category), using category id:

$query = new WP_Query(array("category__in" => 4));

Show Posts From Several Categories

Display posts that have these categories, using category id:

$query = new WP_Query(array("cat" => "2,6,17,38"));

Display posts that have these categories, using category slug:

$query = new WP_Query(array("category_name" => "staff,news"));

Display posts that have "all" of these categories:

$query = new WP_Query(array("category_name" => "staff+news"));

Exclude Posts Belonging to Category

Display all posts except those from a category by prefixing its id with a "-" (minus) sign.

$query = new WP_Query(array("cat" => "-12,-34,-56"));

Multiple Category Handling

Display posts that are in multiple categories. This shows posts that are in both categories 2 and 6:

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

To display posts from either category 2 OR 6, you could use cat as mentioned above, or by using category__in (note this does not show posts from any children of these categories):

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

You can also exclude multiple categories this way:

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

Tag Parameters

Show posts associated with certain tags.

  • tag (string ) - use tag slug.
  • tag_id (int ) - use tag id.
  • tag__and (array ) - use tag ids.
  • tag__in (array ) - use tag ids.
  • tag__not_in (array ) - use tag ids.
  • tag_slug__and (array ) - use tag slugs.
  • tag_slug__in (array ) - use tag slugs.

Show Posts for One Tag

Display posts that have this tag, using tag slug:

$query = new WP_Query(array("tag" => "cooking"));

Display posts that have this tag, using tag id:

$query = new WP_Query(array("tag_id" => 13));

Show Posts From Several Tags

Display posts that have "either" of these tags:

$query = new WP_Query(array("tag" => "bread,baking"));

Note: If WP_Query determines that the result will be singular ( is true), it will ignore the tax_query parameter. To modify tax_query , use the filter to add the required SQL statements.

Important Note: tax_query takes an array of tax query arguments arrays (it takes an array of arrays). This construct allows you to query multiple taxonomies by using the relation parameter in the first (outer) array to describe the boolean relationship between the taxonomy arrays.

Simple Taxonomy Query:

Display posts tagged with bob , under people custom taxonomy:

$args = array("post_type" => "post", "tax_query" => array(array("taxonomy" => "people", "field" => "slug", "terms" => "bob",),),); $query = new WP_Query($args);

Multiple Taxonomy Handling:

Display posts from several custom taxonomies:

$args = array("post_type" => "post", "tax_query" => array("relation" => "AND", array("taxonomy" => "movie_genre", "field" => "slug", "terms" => array("action", "comedy"),), array("taxonomy" => "actor", "field" => "term_id", "terms" => array(103, 115, 206), "operator" => "NOT IN",),),); $query = new WP_Query($args);

Display posts that are in the quotes category OR have the quote :

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomy" => "category", "field" => "slug", "terms" => array("quotes"),), array("taxonomy" => "post_format", "field" => "slug", "terms" => array("post-format-quote"),),),); $query = new WP_Query($args);

Nested Taxonomy Handling:

The "tax_query" clauses can be nested, to create more complex queries. Example: Display posts that are in the quotes category OR both have the quote post format AND are in the wisdom category:

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomy" => "category", "field" => "slug", "terms" => array("quotes"),), array("relation" => "AND", array("taxonomy" => "post_format", "field" => "slug", "terms" => array("post-format-quote"),), array("taxonomy" => "category", "field" => "slug", "terms" => array("wisdom"),),),),); $query = new WP_Query($args);

Search Parameter

Show posts based on a keyword search.

  • s (string ) - Search keyword.

Show Posts based on a keyword search

Display posts that match the search term "keyword":

$query = new WP_Query(array("s" => "keyword"));

Prepending a term with a hyphen will exclude posts matching that term. Eg, "pillow -sofa" will return posts containing "pillow" but not "sofa" (available since ).

Post & Page Parameters

Display content based on post and page parameters. Remember that default post_type is only set to display posts but not pages.

  • p (int ) - use post id. Default post type is post.
  • name (string ) - use post slug.
  • title (string ) - use post title (available with ).
  • page_id (int ) - use page id.
  • pagename (string ) - use page slug.
  • post_parent (int ) - use page id to return only child pages. Set to 0 to return only top-level entries.
  • post_parent__in (array ) - use post ids. Specify posts whose parent is in an array. (available since )
  • post_parent__not_in (array ) - use post ids. Specify posts whose parent is not in an array. Like post__in/post__not_in, id"s that are present in post_parent__in will over-ride ids specified in post_parent__not_in (available since )
  • post__in (array ) - use post ids. Specify posts to retrieve. ATTENTION If you use sticky posts, they will be included (prepended!) in the posts you retrieve whether you want it or not. To suppress this behaviour use .
  • post__not_in (array ) - use post ids. Specify post NOT to retrieve. If this is used in the same query as post__in, it will be ignored.
  • post_name__in (array ) - use post slugs. Specify posts to retrieve. (available since )
  • post_type (string / array ) - use post types. Retrieves posts by , default value is " post ". If " tax_query " is set for a query, the default value becomes " any ";
    • " post " - a post.
    • " page " - a page.
    • " revision " - a revision.
    • " attachment " - an attachment. Whilst the default WP_Query post_status is "publish", attachments have a default post_status of "inherit". This means no attachments will be returned unless you also explicitly set post_status to "inherit" or "any". (See , below)
    • " nav_menu_item " - a navigation menu item
    • " any " - retrieves any type except revisions and types with "exclude_from_search" set to true.
    • Custom Post Types (e.g. movies)

Show Post by Type

Display only pages:

$query = new WP_Query(array("post_type" => "page"));

Display " any " post type (retrieves any type except revisions and types with "exclude_from_search" set to TRUE):

$query = new WP_Query(array("post_type" => "any"));

Display multiple post types, including custom post types:

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

Status Parameters

  • post_status (string / array ) - use post status. Retrieves posts by . Default value is " publish ", but if the user is logged in, " private " is added. Public are also included by default. And if the query is run in an admin context (administration area or AJAX call), protected statuses are added too. By default protected statuses are " future ", " draft " and " pending ".
    • " publish " - a published post or page.
    • " pending " - post is pending review.
    • " draft " - a post in draft status.
    • " auto-draft " - a newly created post, with no content.
    • " future " - a post to publish in the future.
    • " private " - not visible to users who are not logged in.
    • " inherit " - a revision. see .
    • " trash " - post is in trashbin (available since ).
    • " any " - retrieves any status except those from post statuses with "exclude_from_search" set to true (i.e. trash and auto-draft).

Show Post by Status

Display only drafts:

$query = new WP_Query(array("post_status" => "draft"));

Display multiple post status:

$args = array("post_status" => array("pending", "draft", "future")); $query = new WP_Query($args);

Display all attachments:

$args = array("post_status" => "any", "post_type" => "attachment"); $query = new WP_Query($args);

Comment Parameters

$paged = (get_query_var("page")) ? get_query_var("page") : 1; $query = new WP_Query(array("paged" => $paged));

Show Sticky Posts

Display just the first sticky post:

$sticky = get_option("sticky_posts"); $query = new WP_Query(array("p" => $sticky));

Display just the first sticky post, if none return the last post published:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" =>

Display just the first sticky post, add this line to above block:

If ($sticky) { // insert here your stuff... }

Don"t Show Sticky Posts

Exclude all sticky posts from the query:

$query = new WP_Query(array("post__not_in" => get_option("sticky_posts")));

Return ALL posts within the category, but don"t show ("ignore") sticky posts at the top (They will still show in their natural position, e.g. by date):

$query = new WP_Query(array("ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6);

Exclude sticky posts from a category. Return posts within the category, but exclude sticky posts completely, and adhere to paging rules:

$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 = new WP_Query($args);

Order & Orderby Parameters

Sort retrieved posts.

  • order (string | array ) - Designates the ascending or descending order of the " orderby " parameter. Defaults to "DESC". An array can be used for multiple order/orderby sets.
    • " ASC " - ascending order from lowest to highest values (1, 2, 3; a, b, c).
    • " DESC " - descending order from highest to lowest values (3, 2, 1; c, b, a).
  • orderby (string | array ) - Sort retrieved posts by parameter. Defaults to "date (post_date)". One or more options can be passed.
    • " none " - No order (available since ).
    • " ID " - Order by post id. Note the capitalization.
    • " author " - Order by author. (" post_author " is also accepted.)
    • " title " - Order by title. (" post_title " is also accepted.)
    • " name " - Order by post name (post slug). (" post_name " is also accepted.)
    • " type " - Order by (available since ). (" post_type " is also accepted.)
    • " date " - Order by date. (" post_date " is also accepted.)
    • " modified " - Order by last modified date. (" post_modified " is also accepted.)
    • " parent " - Order by post/page parent id. (" post_parent " is also accepted.)
    • " rand " - Random order. You can also use " RAND(x) " where " x " is an integer seed value. Note an "order" parameter needs to be present for "orderby" rand to work.
    • " comment_count " - Order by number of comments (available since ).
    • " relevance " - Order by search terms in the following order: First, whether the entire sentence is matched. Second, if all the search terms are within the titles. Third, if any of the search terms appear in the titles. And, fourth, if the full sentence appears in the contents.
    • " menu_order " - Order by Page Order. Used most often for (Order field in the Edit Page Attributes box) and for (the integer fields in the Insert / Upload Media Gallery dialog), but could be used for any post type with distinct " menu_order " values (they all default to 0).
    • " meta_value " - Note that a " meta_key=keyname " must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect). Use " meta_value_num " instead for numeric values. You may also specify " meta_type " if you want to cast the meta value as a specific type. Possible values are "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED", same as in " $meta_query ". When using " meta_type " you can also use " meta_value_* " accordingly. For example, when using DATETIME as " meta_type " you can use " meta_value_datetime " to define order structure.
    • " meta_value_num " - Order by numeric meta value (available since ). Also note that a " meta_key=keyname " must also be present in the query. This value allows for numerical sorting as noted above in " meta_value ".
    • " post__in " - Preserve post ID order given in the " post__in " array (available since ). Note
    • " post_name__in " - Preserve post slug order given in the " post_name__in " array (available since ). Note - the value of the order parameter does not change the resulting sort order.
    • " post_parent__in " - Preserve post parent order given in the " post_parent__in " array (available since ). Note - the value of the order parameter does not change the resulting sort order.

Show Posts sorted by Title, Descending order

Display posts sorted by post "title" in a descending order:

$args = array("orderby" => "title", "order" =>

Display posts sorted by "menu_order" with a fallback to post "title", in a descending order:

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

Show Random Post

Display one random post:

$args = array("orderby" => "rand", "posts_per_page" => 1,); $query = new WP_Query($args);

Show Popular Posts

Display posts ordered by comment count:

$args = array("orderby" => "comment_count"); $query = new WP_Query($args);

Show Products sorted by Price

Display posts with "Product" type ordered by "Price" custom field:

$args = array("post_type" => "product", "orderby" => "meta_value_num", "meta_key" => "price",); $query = new WP_Query($args);

Multiple "orderby" values

Display pages ordered by "title" and "menu_order". (title is dominant):

$args = array("post_type" => "page", "orderby" => "title menu_order", "order" => "ASC",); $query = new WP_Query($args);

Multiple "orderby" values using an array

Display pages ordered by "title" and "menu_order" with different sort orders (ASC/DESC) (available since ):

$args = array("orderby" => array("title" => "DESC", "menu_order" => "ASC")); $query = new WP_Query($args);

Mulitiple orderby/order pairs

$args = array("orderby" => array("meta_value_num" => "DESC", "title" => "ASC"), "meta_key" => "age"); $query = new WP_Query($args);

"orderby" with "meta_value" and custom post type

Display posts of type "my_custom_post_type", ordered by "age", and filtered to show only ages 3 and 4 (using meta_query).

$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 = new WP_Query($args);

"orderby" with multiple "meta_key"s

If you wish to order by two different pieces of postmeta (for example, City first and State second), you need to combine and link your meta query to your orderby array using "named meta queries". See the example below:

$q = new WP_Query(array("meta_query" => array("relation" => "AND", "state_clause" => array("key" => "state", "value" => "Wisconsin",), "city_clause" => array("key" => "city", "compare" => "EXISTS",),), "orderby" => array("city_clause" => "ASC", "state_clause" => "DESC",),));

Date Parameters

Show posts associated with a certain time and date period.

  • year (int ) - 4 digit year (e.g. 2011).
  • monthnum (int
  • w (int ) - Week of the year (from 0 to 53). Uses MySQL WEEK command . The mode is dependent on the "start_of_week" option.
  • day (int
  • hour (int ) - Hour (from 0 to 23).
  • minute (int ) - Minute (from 0 to 60).
  • second (int ) - Second (0 to 60).
  • m (int ) - YearMonth (For e.g.: 201307 ).
  • date_query (array ) - Date parameters (available since ).
    • year (int ) - 4 digit year (e.g. 2011).
    • month (int ) - Month number (from 1 to 12).
    • week (int ) - Week of the year (from 0 to 53).
    • day (int ) - Day of the month (from 1 to 31).
    • hour (int ) - Hour (from 0 to 23).
    • minute (int ) - Minute (from 0 to 59).
    • second (int ) - Second (0 to 59).
    • after (string/array ) - Date to retrieve posts after. Accepts strtotime()
      • year (string
      • month (string ) The month of the year. Accepts numbers 1-12. Default: 12.
      • day (string ) The day of the month. Accepts numbers 1-31. Default: last day of month.
    • before (string/array ) - Date to retrieve posts before. Accepts strtotime() -compatible string, or array of "year", "month", "day" values:
      • year (string ) Accepts any four-digit year. Default is empty.
      • month (string ) The month of the year. Accepts numbers 1-12. Default: 1.
      • day (string ) The day of the month. Accepts numbers 1-31. Default: 1.
    • inclusive (boolean ) - For after/before, whether exact value should be matched or not".
    • compare (string ) - See WP_Date_Query::get_compare().
    • column (string ) - to query against. Default: "post_date".
    • relation (string ) - OR or AND, how the sub-arrays should be compared. Default: AND.

Returns posts dated December 12, 2012:

$query = new WP_Query("year=2012&monthnum=12&day=12");

$args = array("date_query" => array(array("year" => 2012, "month" => 12, "day" => 12,),),); $query = new WP_Query($args);

Returns posts for today:

$today = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["mon"] . "&day=" . $today["mday"]);

$today = getdate(); $args = array("date_query" => array(array("year" => $today["year"], "month" => $today["mon"], "day" => $today["mday"],),),); $query = new WP_Query($args);

Returns posts for this week:

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

$args = array("date_query" => array(array("year" => date("Y"), "week" => date("W"),),),); $query = new WP_Query($args);

Return posts between 9AM to 5PM on weekdays

$args = array("date_query" => array(array("hour" => 9, "compare" => ">=",), array("hour" => 17, "compare" => "<=",), array("dayofweek" => array(2, 6), "compare" => "BETWEEN",),), "posts_per_page" =>

Return posts from January 1st to February 28th

$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 = new WP_Query($args);

Note that if a strtotime() -compatible string with just a date was passed in the before parameter, this will be converted to 00:00:00 on that date. In this case, even if inclusive was set to true, the date would not be included in the query. If you want a before date to be inclusive, include the time as well, such as "before" => "2013-02-28 23:59:59" , or use the array format, which is adjusted automatically if inclusive is set.

Return posts made over a year ago but modified in the past month

$args = array("date_query" => array(array("column" => "post_date_gmt", "before" => "1 year ago",), array("column" => "post_modified_gmt", "after" => "1 month ago",),), "posts_per_page" => -1,); $query = new WP_Query($args);

The "date_query" clauses can be nested, in order to construct complex queries. See for details on the syntax.

Custom Field Parameters

Show posts associated with a certain custom field.

This part of the query is parsed by , so check as well in case this list of arguments isn"t up to date.

  • meta_key (string ) - Custom field key.
  • meta_value (string ) - Custom field value.
  • meta_value_num (number ) - Custom field value.
  • meta_compare (string ) - Operator to test the " meta_value ". Possible values are "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" or "RLIKE". Default value is "=".
  • meta_query (array ) - Custom field parameters (available since ).
    • relation (string ) - The logical relationship between each inner meta_query array when there is more than one. Possible values are "AND", "OR". Do not use with a single inner meta_query array.

meta_query also contains one or more arrays with the following keys:

  • key (string ) - Custom field key.
  • value (string |array ) - Custom field value. It can be an array only when compare is "IN" , "NOT IN" , "BETWEEN" , or "NOT BETWEEN" . You don"t have to specify a value when using the "EXISTS" or "NOT EXISTS" comparisons in WordPress 3.9 and up.
    (Note: Due to bug #23268 , value is required for NOT EXISTS comparisons to work correctly prior to 3.9 . You must supply some string for the value parameter. An empty string or NULL will NOT work. However, any other string will do the trick and will NOT show up in your SQL when using NOT EXISTS . Need inspiration? How about "bug #23268" .)
  • compare (string ) - Operator to test. Possible values are "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "EXISTS" and "NOT EXISTS". Default value is "=".
  • type (string ) - Custom field type. Possible values are "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED". Default value is "CHAR". You can also specify precision and scale for the "DECIMAL" and "NUMERIC" types (for example, "DECIMAL(10,5)" or "NUMERIC(10)" are valid).

The "type" DATE works with the "compare" value BETWEEN only if the date is stored at the format YYYY-MM-DD and tested with this format.

Important Note: meta_query takes an array of meta query arguments arrays (it takes an array of arrays) - you can see this in the examples below. This construct allows you to query multiple metadatas by using the relation parameter in the first (outer) array to describe the boolean relationship between the meta queries. Accepted arguments are "AND", "OR". The default is "AND".

Simple Custom Field Query:

Display posts where the custom field key is "color", regardless of the custom field value:

$query = new WP_Query(array("meta_key" => "color"));

Display posts where the custom field value is "blue", regardless of the custom field key:

$query = new WP_Query(array("meta_value" => "blue"));

Display where the custom field value is "blue", regardless of the custom field key:

$args = array("meta_value" => "blue", "post_type" => "page"); $query = new WP_Query($args);

Display posts where the custom field key is "color" and the custom field value is "blue":

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

Display posts where the custom field key is "color" and the custom field value IS NOT "blue":

$args = array("meta_key" => "color", "meta_value" => "blue", "meta_compare" => "!="); $query = new WP_Query($args);

Display posts where the custom field value is a number. Displays only posts where that number is less than 10. (WP_Query uses this equation to compare: $post_meta . $args["meta_compare"] . $args["meta_value"] , where "$post_meta" is the value of the custom post meta stored in each post; the actual equation with the values filled in: $post_meta < 10)

$args = array("post_type" => "post", "meta_key" => "number", "meta_value_num" => 10, "meta_compare" => "<",); $query = new WP_Query($args);

Display posts where the custom field key is a set date and the custom field value is now. Displays only posts which date has not passed.

$args = array("post_type" => "event", "meta_key" => "event_date", "meta_value" => date("Ymd"), // change to how "event date" is stored "meta_compare" => ">",); $query = new WP_Query($args);

Display "product"(s) where the custom field key is 'price' and the custom field value that is LESS THAN OR EQUAL TO 22.
By using the 'meta_value' parameter the value 99 will be considered greater than 100 as the data are stored as 'strings', not 'numbers'. For number comparison use 'meta_value_num'.

$args = array('meta_key' => 'price', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' => 'product'); $query = new WP_Query($args);

Display posts with a custom field value of zero (0), regardless of the custom field key:

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

Single Custom Field Handling:

Display posts from a single custom field:

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

(Note that meta_query expects nested arrays, even if you only have one query.)

Если вы следили за нашей серией статей, то уже наверняка знаете, как устроен класс WP_Query , и как его можно использовать для создания собственных запросов. Чтобы определять, какие именно данные вы хотите извлечь из базы данных, нужно ознакомиться с аргументами этого класса и научиться правильно их применять.

Сегодня мы познакомимся с аргументами для произвольных полей (custom fields ), но сначала вспомним, как использовать аргументы в WP_Query .

Вспоминаем, как работают аргументы в WP_Query

Когда вы используете WP_Query в темах оформления или плагинах, приходится включать в код четыре основных элемента:

  • Аргументы для запроса, в которых используются параметры;
  • Сам запрос;
  • Цикл;
  • Завершающий этап: сброс данных записи.

На практике это выглядит следующим образом:

have_posts()) { // начало цикла обработки данных из результатов запроса while ($query->have_posts()) { $query->the_post(); // содержимое опрашиваемой записи } } // восстановление исходных данных записи wp_reset_postdata(); ?>

Аргументы сообщают WordPress , какие данные нужно извлекать из базы данных:

$args = array(// Аргументы для вашего запроса);

Как видно, аргументы заключены в массив.

Создаем код для аргументов

Существует специальный способ задания аргументов в массиве:

$args = array("parameter1" => "value", "parameter2" => "value", "parameter3" => "value");

Нужно заключать параметры и их значения в одинарные кавычки, а также использовать => между ними. Каждый аргумент разделяется запятой. Если здесь что-то сделать неправильно, то WordPress может опросить не все указанные вами аргументы, и на экран ничего не выведется.

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

Произвольные поля (также известные как метаданные записей ) могут использовать отдельный класс WP_Meta_Query . Поэтому для получения метаданных записи, можно использовать либо WP_Meta_Query , либо WP_Query (который все равно обращается к WP_Meta_Query ). Но если требуется сделать запрос метаданных и других элементов (вроде типа записи ), то следует использовать только WP_Query .

Основное отличие в применении этого класса и WP_Query заключается в том, что WP_Query позволяет вам создавать простые аргументы без необходимости использовать вложенные массивы.

Параметры для простого запроса произвольного поля

Основные параметры WP_Query для выполнения запросов к произвольным полям:

  • meta_key (string ): ключ произвольного поля;
  • meta_value (string
  • meta_value_num (number ): значение произвольного поля;
  • meta_compare (string ): оператор для тестирования "meta_value ". Допустимые значения: "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" или "RLIKE". Значение по умолчанию: "=".

Используйте эти параметры для создания простых запросов к произвольным полям. Например, чтобы вывести записи, в которых имеются произвольные поля с ключом key1 (независимо от его значения ), нужно использовать следующий аргумент:

$args = array("meta_key" => "key1");

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

$args = array("meta_key" => "key1", "meta_value" => "value1");

Такой аргумент выведет все записи с произвольным полем, у которого имеется ключ key1 со значением value1 .

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

$args = array("meta_value" => "value1");

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

Используем аргумент meta_compare

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

  • =: Равно. Это параметр по умолчанию. То есть, если вы не используете аргумент meta_compare , WP_Query будет использовать именно его;
  • !+: Не равно;
  • >: Больше чем;
  • >=: Больше или равно;
  • LIKE: Этот параметр игнорирует регистр, в котором вы вносите значение. Здесь даже можете использовать специальные символы для поиска значений;
  • NOT LIKE: Работает по тому же принципу, что и LIKE, только абсолютно противоположно;
  • IN: Используйте этот параметр с массивом в аргументе ‘value’ для поиска записей с одним или несколькими значениями в массиве;
  • BETWEEN: Используется с массивом из двух числовых значений (указанных в аргументе meta_value) для поиска записей со значением произвольного поля, находящимся между этими двумя значениями (но не равным им);
  • NOT BETWEEN: Осуществляет запрос записей со значением произвольного поля, находящимся за пределами указанного интервала из двух цифровых значений в meta_value.

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

$args = array("meta_key" => "key1", "meta_compare" => "!=");

Можно использовать значение ‘NOT IN’ в аргументе meta_compare , который также может применяться со строкой из нескольких значений:

$args = array("meta_key" => "key1, key2", "meta_compare" => "NOT IN");

Этот код выполняет запрос записей, у которых нет произвольных полей со значениями key1 или key2 . Если нужно запросить записи с определенным произвольным полем, но не с другим, то можно использовать вложенный массив, о котором я вам расскажу позже.

В приведенных выше примерах используются нецифровые значения. Вы можете использовать WP_Query с произвольными полями, в которых указаны числовые значения, не только для извлечения записей с этими значениями, но и для запросов к тем постам, значение произвольных полей которых выше или ниже указанных. Для примера, такое может пригодиться в интернет-магазине, когда нужно осуществить поиск товаров дешевле или дороже указанной стоимости.

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

$args = array("meta_key" => "numkey", "meta_value" => "100", "meta_compare" => ">");

Этот запрос позволит получить все записи, значением произвольного поля которых является значение выше 100. Если нужно запросить записи со значениями от 100 и выше, то можно использовать параметр "meta_compare" => ">=" .

Также при помощи аргумента BETWEEN и массива можно находить записи, в произвольных полях которых используются значения в определенном диапазоне:

$args = array("meta_key" => "numkey", "meta_value" => array ("100", "200"), "meta_compare" => "BETWEEN");

Такой запрос позволит найти все записи со значением произвольных полей между 100 и 200.

Запросы для вложенных произвольных полей

Если нужно выполнить запрос по нескольким произвольным полям или использовать более одного оператора, то можно воспользоваться вложенным массивом.

Структура запроса будет следующей:

$args = array("meta_query" => array("relation" => "", // Опциональный аргумент. array(// здесь будут аргументы `meta_query`.)));

Структура аргумента "meta_query" в классе WP_Query будет такой же, как и при использовании класса WP_Meta_Query , о котором мы подробно поговорим в следующих статьях.

После выхода WordPress версии 4.1 стало можно использовать несколько уровней вложенных массивов для создания еще более сложных и точных запросов. Структура таких запросов выглядит примерно так:

$args = array("meta_query" => array("relation" => "", // Опциональный аргумент. array("relation" => "", array (// Первый набор аргументов `meta_query`.), array (// Второй набор аргументов `meta_query`.))));

Такой подход позволяет использовать различные взаимосвязи на разных уровнях в запросе. К примеру, можно создать запрос записей с одним значением в одном произвольном поле, и обоими значениями в другом произвольном поле.

В завершение

Применение класса WP_Query для создания запросов метаданных записей (или произвольных полей ) предоставляет гибкость при работе с множеством различных аргументов в сочетании с операторами.

Если в своем запросе вы хотите использовать только аргументы метаданных записей (и не комбинировать их с другими ), то можно также использовать класс WP_Meta_Query , о котором мы поговорим позже.

Перевод статьи “WP_Query Arguments: Custom Fields ” был подготовлен дружной командой проекта Сайтостроение от А до Я.

Prestashop представляет собой движок для управления интернет-магазином. В интернете можно найти множество как платных, так и бесплатных модулей Prestashop, которые помогают улучшить страницы товаров и увеличить количество переходов. В этой статье мы рассмотрим 5 лучших SEO-модулей.



Понравилась статья? Поделиться с друзьями: