Класс 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;
    }
}

Проверенный хостинг

Beget

Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.

Timeweb

Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.

Заказать кастомную разработку

Корпоративные порталы
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Мобильные приложения
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Разработка ИТ-продукта
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM