Класс Query
Класс Query предназначен для удобного формирования запросов к базе данных WordPress для получения постов, используя функции get_posts() и WP_Query().
Свойства
query— массив аргументов запроса, который содержит значения по умолчанию для основных параметров поиска.
Методы класса
__construct($type = 'post')
Конструктор класса Query принимает аргумент $type, который определяет тип записей, с которыми будет работать объект. Значение по умолчанию — 'post'.
$query = new Query('page'); // Создание объекта, работающего с типом записей "page"
args($args = [])
Метод args принимает ассоциативный массив параметров запроса и заменяет имеющийся массив $query. Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
args($args = [])
Метод args принимает ассоциативный массив параметров запроса и заменяет имеющийся массив $query. Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
$query = new Query();
$query->args([
'post_type' => 'product',
'posts_per_page' => 10,
'meta_query' => [
[
'key' => 'price',
'value' => 100,
'compare' => '<=',
'type' => 'NUMERIC'
]
]
]);
type($type = 'post')
Метод type принимает тип записей и заменяет значение параметра 'post_type' в массиве $query. Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
$query = new Query();
$query->type('page');
where($key, $value)
Метод where принимает два аргумента — ключ и значение — и заменяет соответствующее значение в массиве $query. Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
$query = new Query();
$query->where('posts_per_page', 10);
meta($key, $value, $compare = '=')
Метод meta добавляет в массив $query параметры для поиска по метаполям. Принимает три аргумента — ключ метаполя, значение и оператор сравнения (по умолчанию '='). Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
$query = new Query();
$query->meta('price', 100, '<=');
metaOr($key, $value, $compare = '=')
Метод metaOr работает аналогично методу meta, но дополнительно задает параметр 'relation' => 'or' в массиве $query['meta_query']. Это позволяет использовать оператор «или» при поиске по метаполям. Возвращает текущий объект, чтобы можно было использовать его в цепочке методов.
$query = new Query();
$query->metaOr('color', 'red')
->meta('color', 'blue');
tax($tax, $terms, $field = 'term_id')
Метод tax добавляет в массив $query параметры для поиска по таксономиям. Принимает три аргумента — таксономия, массив терминов и поле для сравнения (по умолчанию 'term_id').
$query = new Query();
$query->tax('category', 'news')->get();
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
class Query {
public $query = [
'post_type' => 'post',
'meta_query' => [],
'tax_query' => [],
'posts_per_page' => -1,
'post__not_in' => []
];
function __construct($type = 'post')
{
$this->query['post_type'] = $type;
}
public function args($args = []) {
$this->query = $args;
return $this;
}
public function type($type = 'post') {
$this->query['post_type'] = $type;
return $this;
}
public function where($key, $value) {
$this->query[$key] = $value;
return $this;
}
public function meta($key, $value, $compare = '=') {
$this->query['meta_query'][] = [
'key' => $key,
'value' => $value,
'compare' => $compare
];
return $this;
}
public function tax($tax, $terms, $field = 'term_id') {
$this->query['tax_query'][] = [
'taxonomy' => $tax,
'field' => $field,
'terms' => $terms
];
return $this;
}
public function count($count = -1) {
$this->query['posts_per_page'] = $count;
return $this;
}
public function postNotIn($items = []) {
$this->query['post__not_in'] = $items;
return $this;
}
public function get() {
return get_posts($this->query);
}
public function wpGet() {
return (new WP_Query($this->query));
}
public function metaKey($key) {
$this->query['meta_key'] = $key;
return $this;
}
public function orderBy($by, $order = 'desc') {
$this->query['orderby'] = $by;
$this->query['order'] = $order;
return $this;
}
public function orderByMeta($by, $order = 'desc') {
$this->orderBy('meta_value', $order);
$this->metaKey($by);
return $this;
}
public function orderByMetaNum($by, $order = 'desc') {
$this->orderBy('meta_value_num', $order);
$this->metaKey($by);
return $this;
}
public function first() {
$this->query['posts_per_page'] = 1;
$posts = get_posts($this->query);
if(!empty($posts)) {
return $posts[0];
}
return null;
}
public function paged($page_number = 1) {
$this->query['paged'] = $page_number;
return $this;
}
}
Проверенный хостинг
Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.
Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.