Вы здесь
Главная > Мой блог > WEB-разработка > Работа с датами в WordPress с помощью WP_Date_Query

Работа с датами в WordPress с помощью WP_Date_Query

Работать с датами в запросах WordPress — не самое простое дело, но в WordPress версии 3.7 появится новый класс WP_Date_Query. Он уже поддерживается классами WP_Query и WP_Comment_Query, что позволяет работать с комплексными датами при запросе записей и комментариев в WordPress.

Работа с простыми датами в WordPress

С простыми датами в WordPress можно было ещё давно. Класс WP_Query поддерживает аргументы: year, monthnum, day, hour и другие. Это позволяет нам искать записи с определённой датой публикации, например:

Получить записи опубликованные в 2013 году:

Все записи опубликованные 10 сентября 2013 года:

Или получить записи опубликованные первого числа каждого месяца 2012 года:

Эти аргументы уже давно не новшество в WordPress, но их гибкость оставляет желать лучшего. Например, получить все записи за последние 14 дней, все записи от 1-31 июля 2012 года, все записи с понедельника по пятницу за последние два месяца и т.д. — всё это невозможно реализовать без использования таких вещей, как например фильтр posts_where, который позволяет изменять непосредственно SQL запрос.

К счастью в WordPress 3.7 появилась возможность составлять комплексные запросы с датами с помощью нового аргумента date_query.

Работа с датами с помощью date_query

Аргумент date_query реализован классом WP_Date_Query и поддерживается для запросов с помощью WP_Query и WP_Comment_Query. Сам аргумент — многомерный массив с поддержкой немалого количества элементов:

  • column — используемое поле в базе данных для запроса, по умолчанию используется post_date
  • compare — каким оператором стоит производить сравнение, например =, >=, BETWEEN и т.д.
  • relation — какой оператор будет использован при указании более одного массива с датами, AND (по умолчанию) или OR

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

  • column — см. выше, только для конкретной даты
  • compare — см. выше, только для конкретной даты
  • before — строка или массив с датой «до»
  • after — строка или массив с датой «после»
  • inclusive — аргументы before и after обрабатываются включительно, если true
  • year — год, например 2013
  • month — месяц, 1-12
  • week — неделя, 0-53
  • day — день, 1-31
  • dayofweek — день недели, 1-7
  • hour — час, 0-23
  • minute — минута, 0-60
  • second — секунда, 0-60

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

Примеры

Все записи опубликованные 10 сентября 2013 года:

Все записи опубликованные с 1-10 сентября 2013 года:

Или в более простой форме с использованием аргументов before и after:

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

Эта же функция умеет обрабатывать и относительные даты, например так мы можем получить записи за последние две недели:

Или все записи за последние два месяца, опубликованные в будние дни

Новый аргумент date_query поддерживается и другими функциями, использующие класс WP_Query, например get_posts() и query_posts(), а так же функциями, которые работают с классом WP_Comment_Query, как например get_comments().

Стоит так же отметить, что простые аргументы (year, month и т.д.) продолжают поддерживаться в новых версиях WordPress, но они являются лишь синонимами к новому аргументу date_query.

Источник: https://wpmag.ru/

Добавить комментарий

Top