Статьи

Расширенные запросы WordPress, часть 1

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

В прошлом месяце мы посмотрели «Руководство для начинающих по циклу WordPress» . Эта публикация была полным обзором цикла WordPress и его использования в контексте темы. В этом посте Брейден также более подробно рассмотрел WP Query, демонстрирующий, как можно настроить результаты, которые возвращаются до использования преимущества Loop. Сегодня мы рассмотрим базу данных WordPress, как мы взаимодействуем с ней и преимущества сложных запросов.


Прежде чем копать слишком глубоко в запросы к базе данных WordPress, важно понять ее структуру. Нам не обязательно проверять каждый столбец каждой таблицы, но общее понимание может иметь большое значение.

База данных WordPress

Вообще говоря, таблицы WordPress и их обязанности следующие:

  • wp_comments : где хранятся комментарии
  • wp_commentmeta : метаданные, связанные с каждым комментарием
  • wp_links : где данные хранятся на основе ссылок WordPress
  • wp_options : все опции в разделе Администрирование> Настройки хранятся здесь
  • wp_posts : данные поста и страницы хранятся здесь
  • wp_postmeta : метаданные, связанные с каждым сообщением
  • wp_terms : категории и теги для постов и страниц
  • wp_term_relationships : данные, представляющие отношения между сообщениями, категориями и тегами.
  • wp_term_taxonomy : описания тегов, ссылок и / или категорий, хранящиеся в wp_terms
  • wp_users : где хранится каждая учетная запись пользователя
  • wp_usermeta : метаданные, связанные с каждым пользователем.

Достаточно просто, правда? Используя ваш любимый интерфейс базы данных, вы можете детально изучить каждую из этих таблиц — столбцы хорошо названы и просты для понимания.

Вы можете просмотреть общую схему и прочитать более подробное описание базы данных в Кодексе .


Как бы ни был гибок WP Query, и как легко создавать пользовательские запросы, он все еще ограничен, особенно когда вы ищете продвинутую разработку тем или разработку плагинов.

Например, API-интерфейс WordPress позволяет легко запрашивать количество комментариев на пост, но что произойдет, если вы захотите уменьшить количество комментариев для каждого пользователя на пост (или на страницу) и упорядочить их по дате или количеству сколько раз они комментировали? Очевидно, вам нужно написать расширенный запрос.

Конечно, это упрощенный пример, но как только вы разберетесь со схемой базы данных и поймете, что можете выполнять типичные SQL-запросы на основе таблицы, у вас есть возможность записать действительно мощную, действительно классную функциональность в следующую. проект.


К счастью, API WordPress позволяет легко подключаться и запрашивать базовую базу данных. Подобно WP Query, WordPress предоставляет класс wpdb, который мы можем использовать для взаимодействия с базой данных. Этот конкретный класс используется для чтения, записи и обновления таблиц базы данных WordPress. Он также предоставляет набор методов, которые позволяют легко защитить наши запросы от внедрения SQL или других вредоносных атак.

Чтобы воспользоваться преимуществами wpdb, мы должны объявить его глобальным. Это даст нам доступ к экземпляру класса в рамках нашей функции (или класса). Например:

1
global $wpdb;

Чтобы увидеть пример класса в действии, мы можем получить общее количество сообщений, которые в данный момент находятся в базе данных, выполнив следующий запрос:

1
$post_count = $wpdb->get_results(«select count(*) from $wpdb->posts»);

Обратите внимание, что вместо выбора данных из wp_posts мы выбираем данные с помощью $ wpdb-> posts. Это удобная функция класса, которая позволяет нам легко извлекать данные независимо от префикса таблицы.

Этот запрос возвращает результаты в объект Array, на который ссылается $ post_count. Вы можете проверить результаты по:

1
print_r($post_count);

Полный скрипт должен выглядеть так:

1
2
3
4
5
<?php
global $wpdb;
$post_count = $wpdb->get_results(«SELECT COUNT(*) FROM $wpdb->posts»);
print_r($post_count);
?>

В целях этого примера вы можете вставить это в любой файл PHP в вашей теме, чтобы проверить его (просто убедитесь, что удалили его :).


Очевидно, что мы только что поцарапали поверхность того, что возможно с классом wpdb, но важно понять основу, на которой мы работаем, прежде чем углубляться в слишком глубоко. Тем не менее, изучение того, как взаимодействовать с базой данных WordPress, открывает массу возможностей.

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