
База данных WordPress: ключевые таблицы, API и безопасная работа с данными
29 декабря 2025
База данных — фундамент WordPress. В ней хранится всё: записи и страницы, пользователи и комментарии, рубрики и метки, настройки сайта и данные плагинов. Чтобы надёжно расширять сайт, разработчику важно понимать схему таблиц, пользоваться высокоуровневыми API и знать, когда уместны собственные таблицы.
TL;DR
- WordPress работает на MySQL (совместим с MariaDB); по умолчанию создаётся 12 таблиц с префиксом wp_ (может быть изменён).
- Контент и пользователи хранятся в шести ключевых таблицах: wp_posts, wp_postmeta, wp_comments, wp_commentmeta, wp_users, wp_usermeta.
- Для взаимодействия используйте Database API и профильные API (Posts, Metadata, Options, Taxonomy), а для особых случаев — $wpdb c
prepare(). - Настройки хранятся в wp_options; избегайте перегруза автозагружаемых опций, применяйте Transients и объектный кеш.
- Собственные таблицы создавайте через
dbDelta()и версионирование схемы; продумывайте индексы и миграции.
Что такое база данных WordPress
WordPress использует реляционную СУБД MySQL (часто это MariaDB на стороне хостинга). Схема состоит из набора таблиц с общим префиксом (по умолчанию wp_, задаётся в wp-config.php). Все данные сайта — от записей до настроек — живут в этих таблицах, а WordPress предоставляет функции и классы, которые скрывают сырой SQL и упрощают безопасное взаимодействие.
Ключевые таблицы: что где хранится

Контент
- wp_posts — единая таблица для записей, страниц и любых кастомных типов (каждая строка — сущность поста).
- wp_postmeta — метаполевая модель для постов (кастомные поля). Хранит пары «ключ—значение», расширяя структуру
wp_posts.
Комментарии
- wp_comments — данные комментариев.
- wp_commentmeta — дополнительные атрибуты комментариев.
Пользователи
- wp_users — базовые данные пользователя (логин, хэш пароля, email и т. д.).
- wp_usermeta — роли, возможности и иные свойства пользователя.
Таксономии
- wp_terms — термины (категории, метки и любые термины кастомных таксономий).
- wp_term_taxonomy — определяет таксономию термина (категория, метка, произвольная).
- wp_term_relationships — связи терминов с объектами (записи, страницы и т. п.).
- wp_termmeta — метаданные терминов.
Настройки и совместимость
- wp_options — опции сайта (ключ—значение), в том числе активная тема, активные плагины, базовые настройки. Поддерживает сериализованные данные; большие опции следует хранить с autoload=no, чтобы не перегружать автозагрузку.
- wp_links — устаревшая таблица для «Блогролла», сохранена ради обратной совместимости.
Как правильно взаимодействовать с данными
Высокоуровневые API: сначала они
Большинство задач решается без SQL благодаря функциям WordPress. Для постов есть wp_insert_post(), wp_update_post(), wp_delete_post() и выборки get_posts()/get_post(). Для комментариев, пользователей и терминов существуют аналогичные CRUD-функции. Метаданные управляются через add_post_meta(), update_post_meta(), delete_post_meta() и их аналоги для пользователей, комментариев и терминов. Настройки — через Options API: add_option(), update_option(), delete_option(), а также get_option().
Для сложных выборок контента используйте WP_Query или get_posts() с аргументами фильтрации, пагинацией и сортировкой. Это даёт кэширование, безопасность и совместимость с экосистемой.
Низкоуровневый доступ: $wpdb
Класс $wpdb — это тонкая абстракция поверх MySQL, позволяющая выполнять подготовленные запросы и получать результаты в разных форматах. Используйте его, когда готовых API недостаточно (например, отчёты или объединения).
global $wpdb;
$post_id = 123;
$sql = $wpdb->prepare(
"SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key = %s",
$post_id,
'rating'
);
$rating = $wpdb->get_var($sql);
Ключевое правило безопасности — всегда применять $wpdb->prepare() для подстановки параметров. Не конкатенируйте пользовательский ввод в SQL. При необходимости возможны транзакции (START TRANSACTION/COMMIT/ROLLBACK) при поддержке движка InnoDB.
Инструменты для доступа
- phpMyAdmin — наиболее распространённый веб‑инструмент работы с БД.
- Adminer — компактная альтернатива в виде одного PHP‑файла.
Производительность и надёжность
- Кэширование: применяйте Transients API для временных вычислений и объектный кеш для снижения нагрузки на БД. В продакшене уместны Redis/Memcached через drop‑in.
- Опции: контролируйте autoload в
wp_options. Крупные или редко используемые массивы держите с autoload=no, используйте транзиенты для дорогих выборок. - Индексы: при добавлении собственных таблиц проектируйте первичные ключи и вторичные индексы по полям фильтрации. Это критично для масштабируемости.
- Безопасность: валидация и санитизация ввода, проверки прав через
current_user_can(), nonce‑поля в формах, подготовленные выражения в SQL.
Собственные таблицы: когда и как
Постмета удобна, но при большом объёме данных и сложной аналитике превращается в узкое место. В таких случаях проектируйте собственные таблицы под конкретную модель данных. Это путь, которым идут крупные плагины электронной коммерции (заказы и связанные сущности вынесены в специализированные таблицы для ускорения отчётов и массовых операций).
Создание и миграции
Создавайте схемы через dbDelta() в активации плагина и храните версию схемы в опции. Так вы сможете безопасно эволюционировать структуру при обновлениях.
function my_plugin_activate() {
global $wpdb;
$table = $wpdb->prefix . 'events';
$charset = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
post_id BIGINT UNSIGNED NOT NULL,
starts_at DATETIME NOT NULL,
ends_at DATETIME NULL,
status VARCHAR(20) NOT NULL,
PRIMARY KEY (id),
KEY post_id (post_id),
KEY starts_at (starts_at)
) $charset;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
add_option('my_plugin_db_version', '1.0.0');
}
После создания зарегистрируйте таблицу в $wpdb (свойства с именами таблиц) и используйте подготовленные запросы. Продумайте внешние ключи (если уместно) и стратегию миграций.
Итоги
Понимание структуры базы и использование высокоуровневых API — залог безопасного и производительного кода на WordPress. Начинайте с готовых функций, переходите к $wpdb для точечных задач, а собственные таблицы применяйте там, где мета‑модель уже не справляется. Так проект будет масштабируемым, предсказуемым и дружелюбным к обновлениям.



