Получение всех записей рубрики из базы данных WordPress

В WordPress есть штатные средства получения записей из конкретной рубрики. Но, как поступить, если они по каким либо причинам не устраивают разработчика и необходимо реализовать собственные?

Для этого требуется, прежде всего, получить записи конкретной рубрики из базы данных WordPress (БД).

В старых версиях WordPress данная задача решалась предельно просто, так как записи и рубрики были связаны напрямую через поле category. В новых версиях всё иначе.

Полное описание структуры БД приведено в документации. Для решения данной задачи потребуются только 4 из них

  • wp_posts – в ней, собственно, и хранятся записи;
  • wp_terms – в ней хранятся рубрики и метки (теги);
  • wp_term_taxonomy – В ней находится таксономия записей из таблицы terms;
  • wp_term_relationships – хранит данные о связях записей из term_taxonomy и posts.

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

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

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

После этого аналогичным образом осуществляется связь с таблицей wp_posts.

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

Всё, что осталось сделать, это отобрать записи, принадлежащие к определённой конкретной рубрике (например, по id) и вывести необходимые поля. В данном случае, для примера, выведем поля, которые содержат название, дату и непосредственно содержание записи для рубрики с id=1.

2 комментария

  1. Как вывести посты предыдущий и следующий относящийся к определенной категории которая прописана в url поста «домен.ру/новости/какая-то-новость» вот «какая-то-новость» может принадлежать еще к нескольким категориям и как получить следующую новость чтобы у нее в url была категория «новости»?

    1. Данный вопрос, к сожалению, не совсем соотносится с темой данной статьи, т.к. решается при помощи стандартных функций WordPress API. А, именно: next_post_link и previous_post_link. Просто в параметре $excluded_terms перечисляете id категорий, которые не нужно учитывать при поиске.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *