WordPress Meta_Query: все, что вам нужно знать

Опубликовано: 2022-04-30

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

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


Запрос сообщений по мета-значению

Вероятно, самый популярный способ запрашивать сообщения с настраиваемым полем — нацеливаться на одно конкретное мета-значение. Например, предположим, что у нас есть сайт, на котором сообщения имеют настраиваемое поле, используемое для определения того, является ли сообщение «избранным». Это обычное дело при создании избранного раздела на сайте WordPress.

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'featured_post' ,
'value' => 'yes' ,
'compare' => '='
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value.php hosted with by GitHub

Конечно, приведенный выше код будет варьироваться в зависимости от того, как вы озаглавите свои поля и мета-ключи, но «ключ» — это имя настраиваемого поля, а «значение» — это то, что мы запрашиваем для сообщений. Поле «сравнить» используется для ряда операций сравнения, которые мы рассмотрим позже в этом посте.

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


Запрос сообщений по нескольким мета-значениям

Если вы хотите сравнить значение мета-ключа с несколькими значениями, лучше всего использовать оператор «IN».

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value-multiple.php hosted with by GitHub

Запрос сообщений по нескольким мета-ключам

Теперь, когда мы запрашивали сообщения с одним мета-ключом, давайте сделаем запрос с несколькими запрашиваемыми полями/ключами. Это позволит вам запрашивать сообщения на основе нескольких настраиваемых полей. В этом примере сочетаются обе вещи, которые мы сделали выше, путем вложения запросов в массив и добавления «отношения» к meta_query.

<?php
$ meta_query_args = array (
'meta_query' => array (
'relation' => 'AND' ,
array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
),
array (
'key' => 'featured_post' ,
'value' => true ,
'compare' => '='
)
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-meta-query-multiple-keys.php hosted with by GitHub

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


Операторы сравнения метазапросов

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

  • '=' Запрашивает метаключи, которые равны метазначению
  • '!=' Запрашивает метаключи, которые НЕ равны метазначению
  • '>' Запрашивает метаключи, которые больше, чем метазначение
  • '>=' Запрашивает метаключи, которые больше и равны метазначению
  • '<' Запрашивает метаключи, которые меньше, чем метазначение
  • '<=' Запрашивает метаключи, которые меньше и равны метазначению
  • «НРАВИТСЯ» Запрашивает метаключи, содержащие слово/фразу (например, запрос «красный» будет соответствовать фразам «красный», «выглядит красным» и «красный стиль»)
  • «НЕ НРАВИТСЯ» Противоположное предыдущему
  • 'IN' Запрашивает метаключи, где значение существует в массиве
  • 'NOT IN' Запрашивает метаключи, где значение существует не в массиве
  • 'BETWEEN' Запрашивает метаключи, где значение находится между двумя числами.
  • 'НЕ МЕЖДУ' Запрашивает метаключи, где значение не находится между двумя числами.
  • 'EXISTS' Запрашивает метаключи, где значение вообще существует
  • «НЕ СУЩЕСТВУЕТ» Запрашивает метаключи, значение которых вообще не существует.
  • 'REGEXP' Запрашивает метаключи на основе регулярного выражения.
  • 'NOT REGEXP' Противоположно указанному выше REGEXP

Как сортировать сообщения по метаполям

Конечно, WordPress позволяет вам сортировать сообщения, используя ваши настраиваемые поля, используя опцию «orderby» в WP_Query. Вам нужно будет установить для «orderby» значение «meta_value», а затем установить значение «meta_key» для имени вашего поля. По умолчанию это наиболее полезно, когда вы хотите, чтобы ваш запрос возвращался в алфавитном порядке или отсортирован по номеру, когда ваше поле является числом.

<?php
$ meta_query_args = array (
'post_type' => 'page' ,
'order' => 'ASC' ,
'meta_key' => 'city_name' ,
'orderby' => 'meta_value'
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-orderby-meta-query.php hosted with by GitHub