Таблицы (структура) Базы Данных WordPress
WordPress в качестве базы данных использует MySQL v5.7 или выше, ИЛИ MariaDB v10.3 или выше.
Ниже все таблицы имеют дефолтный префикс wp_. У вас этот префикс может быть другой - его можно изменить в файле wp-config.php, там он указывается в переменной:
$table_prefix = 'wp_';
Названия всех таблиц находятся в объекте wpdb и получить, например, название таблицы wp_posts с текущим префиксом установленном в конфигурационном файле можно так: $wpdb->posts.
Таблицы WordPress (обычная установка)

Записи
- wp_posts
Таблица куда записываются посты, постоянные страницы, произвольные типы записей, вложения и т.п.
Таблица posts является, пожалуй, самой важной таблицей в базе данных WordPress. Ее название иногда вводит в заблуждение людей, которые считают, что в ней хранятся только записи блога. Однако, несмотря на неудачное название, это чрезвычайно мощная таблица, которая хранит различные типы контента, включая посты, страницы, пункты меню, медиа-вложения и любые пользовательские типы постов, которые использует сайт.
Гибкость таблицы обеспечивается столбцом
post_type, который указывает, является ли строка постом, страницей, вложением, пунктом меню или другим типом.- wp_postmeta
Дополняет таблицу
$wpdb->posts. Хранит дополнительные данные записей (постов) их еще называют метаполя.В этой таблице хранится любая дополнительная информация об отдельных постах. Это таблица использует пары ключ/значение для хранения данных. Эта техника используется в WordPress в ряде таблиц по всей базе данных, что позволяет ядру WordPress, плагинам и темам хранить неограниченное количество данных с разными ключами.
Пользователи
- wp_users
- Таблица с данными о зарегистрированных пользователях.
- wp_usermeta
- Дополнительная информация о пользователях, такая как Имя, Ник, права и прочее.
Мета поля для таблицы $wpdb->users.
Комментарии
- wp_comments
- Таблица с записями комментариев. К любому посту, могут быть размещены комментарии. В этой таблице хранятся эти комментарии и некоторые данные о них.
- wp_commentmeta
- Мета поля (дополнительные данные) для таблицы wp_commentmeta.
Таксономии
- wp_terms
- Таблица содержащая в себе базовую информацию каждом элементе таксономии.
- wp_termmeta
- Таблица содержащая в себе дополнительные поля для таблицы $wpdb->terms.
- wp_term_taxonomy
- Таблица с информацией о таксономиях, их описание. Данные в таблице
wp_termsеще не являются таксономиями - эта таблица расширяет данные каждого термина и присваиваем каждому термину таксономию к которой он относится. - wp_term_relationships
- Таблица связывающая таксономии с контентом (постами, записями и т.п.). Каждая строка этой таблицы определяет связь между постом (объектом) в
wp_postsи термином таксономии из таблицыwp_term_taxonomy.
Остальные таблицы
- wp_options
- Таблица опций (настроек).
- wp_links
- Таблица с записями ссылок. Устарелая таблица, уже давно не используется, однако функционал все еще рабочий, но его нужно включить отдельно.
Таблицы WordPress (Multisite)
Когда сайт WordPress преобразуется в многосайтовую установку, создается "сеть" подсайтов. Текущий сайт становится первым подсайтом сети. В базе данные этот сайт становится сайтом сети (wp_site), а каждый подсайт обозначается как блог (wp_blogs).
- wp_blogs
Хранит информацию о каждом сайте в сети WordPress Multisite.
blog_idID сайта, аsite_idID сети сайтов. Это легаси WP 2.x, когда 'сайт' назывался 'блог'. Так, когда вы добавляете новый под-сайт (блог), будет добавлена новая запись в таблицу wp_blogs с новым значением blog_id и тем же самым site_id.Поле Тип Ключ Умолчание Описание blog_idbigint(20)PK: blog_idУникальный идентификатор блога. site_idbigint(20)0Идентификатор сети, к которой принадлежит блог. domainvarchar(200)K: domainДоменное имя блога. pathvarchar(100)K: domainПуть блога относительно домена. registereddatetime'0000-00-00 00:00:00'Дата и время регистрации блога. last_updateddatetime'0000-00-00 00:00:00'Дата и время последнего обновления блога. publictinyint(2)1Флаг, указывающий, является ли блог публичным (1) или приватным (0). archivedtinyint(2)0Флаг, указывающий, архивирован ли блог (1) или нет (0). maturetinyint(2)0Флаг, указывающий, содержит ли блог взрослый контент (1) или нет (0). spamtinyint(2)0Флаг, указывающий, помечен ли блог как спам (1) или нет (0). deletedtinyint(2)0Флаг, указывающий, удален ли блог (1) или нет (0). lang_idint(11)K: lang_id0Идентификатор языка блога. - wp_blogmeta
Появилась в WP 5.1. Хранит метаданные, связанные с блогами - служебная информация о блогах. Например: db_version, db_last_updated. С появлением этой таблицы вам не нужно использовать таблицу wp_options для хранения некоторых данных о под-сайте и каждый раз использовать switch_to_blog(), когда такие данные нужны.
Поле Тип Ключ Умолчание Описание meta_idbigint(20) unsignedPK: meta_idУникальный идентификатор метаданных. blog_idbigint(20)K: blog_id0Идентификатор блога, к которому относятся метаданные. meta_keyvarchar(255)K: meta_keyNULLКлюч метаданных. meta_valuelongtextNULLЗначение метаданных. - wp_registration_log
Логирует регистрации новых блогов в сети. Содержит данные, когда был зарегистрирован блог сети.
В этой таблице регистрируются пользователи, которые регистрируют новый сайт после его активации.Поле Тип Ключ Умолчание Описание IDbigint(20)PK: IDУникальный идентификатор записи. emailvarchar(255)Email-адрес, использованный при регистрации. IPvarchar(30)K: IPIP-адрес, с которого была произведена регистрация. blog_idbigint(20)0Идентификатор блога, связанного с регистрацией. date_registereddatetime'0000-00-00 00:00:00'Дата и время регистрации. - wp_signups
Это временное хранилище незавершённых регистраций в WordPress Multisite. Записи живут здесь до тех пор, пока пользователь не кликнул по ссылке активации в письме.
Важно понимать:
- Пока
active = 0— пользователя нет в wp_users, он существует только здесь - Email заблокирован именно потому что запись в
wp_signupsуже есть - После активации — создаётся запись в
wp_usersи запись вwp_signupsпомечаетсяactive = 1 - WordPress периодически не чистит эту таблицу, поэтому старые записи могут копиться годами
Когда данные ПОПАДАЮТ в
wp_signupsТолько при регистрации пользователя через форму на фронтенде (
/wp-signup.php) или при добавлении нового пользвателя непосредствено на сайт в админке — WordPress отправляет письмо и ждёт подтверждения.Когда данные НЕ попадают в wp_signups
- Создание через Network Admin → Users → Add New — сразу в
wp_users - Создание через WP-CLI (
wp user create) — сразу вwp_users - Создание через код (
wp_create_user()) — сразу вwp_users - Создание через phpMyAdmin напрямую — сразу в
wp_users
Также в этой таблице хранятся данные о под-сайтах (блогах), которые были зарегистрированы, но не активированы, когда сеть позволяет регистрировать новые сайты. После активации сайта запись помечается как активированная (
active = 1), и параллельно создаётся запись вwp_blogs.Поле Тип Ключ Умолчание Описание signup_idbigint(20)PK: signup_idУникальный идентификатор заявки. domainvarchar(200)K: domainДоменное имя, запрошенное при регистрации. pathvarchar(100)K: domainПуть, запрошенный при регистрации. titlelongtextНазвание блога, указанное при регистрации. user_loginvarchar(60)K: user_loginЛогин пользователя, указанный при регистрации. user_emailvarchar(100)K: user_emailEmail пользователя, указанный при регистрации. registereddatetime'0000-00-00 00:00:00'Дата и время регистрации. activateddatetime'0000-00-00 00:00:00'Дата и время активации. activetinyint(1)0Флаг, указывающий, активен ли пользователь (1) или нет (0). activation_keyvarchar(50)K: activation_keyКлюч активации пользователя. metalongtextДополнительные метаданные о регистрации. - Пока
- wp_site
Содержит информацию о сетях (основные сайты сети).
Эта таблица всегда будет содержать одну сеть, хотя структура таблицы позволяет использовать несколько сетей в одной базе данных. Это не было реализовано в самом WordPress, но может быть реализовано с помощью плагинов, например: WP Multi Network или Networks for WordPress.
Поле Тип Ключ Умолчание Описание idbigint(20)PK: idУникальный идентификатор сайта. domainvarchar(200)K: domainДоменное имя сайта. pathvarchar(100)K: domainПуть сайта относительно домена. - wp_sitemeta
Хранит метаданные, связанные с сетями (сайтами) - опции сети и общие опции для всех её сайтов.
Эта таблица похожа на wp_options, только здесь хранятся опции для всей сети сайтов, а не для конкретного под-сайта. Здесь хранится конфигурация (опции), связанные с сетью, а также другие данные, например, настройки плагинов, которые должны быть доступны для всей сети (для любого сайта сети).
Поле Тип Ключ Умолчание Описание meta_idbigint(20)PK: meta_idУникальный идентификатор метаданных. site_idbigint(20)K: site_id0Идентификатор сайта, к которому относятся метаданные. meta_keyvarchar(255)K: meta_keyNULLКлюч метаданных. meta_valuelongtextNULLЗначение метаданных. - wp_users
- Список пользователей всех сайтов сети. Это общая таблица пользователей для всей сети. Это привычная таблица, только в мультисайт версии добавляются еще 2 поля: spam и delete.
- wp_usermeta
- Содержит мета-данные пользователей. Настройки пользователя для разных сайтов сети.
- wp_blog_versions
Содержит текущую версию базы данных каждого сайта. Данные обновляются при обновлении БД для каждого сайта сети.
При обновлении версии WordPress, на которой работает ваш сайт, иногда происходят изменения в базе данных. Обновление многосайтовой установки до новой версии WordPress внесет эти изменения в глобальные таблицы. Однако обновление также необходимо будет применить к набору таблиц для подсайтов в сети. В этой таблице записана версия базы данных каждого блога в сети, поэтому WordPress знает, какие блоги нуждаются в обновлении, и обновляет их после его запуска.
- Базовые таблицы каждого сайта сети
Таблицы сайта сети:
wp_posts,wp_optionsи т.д. Для каждого сайта сети создаются одинаковые таблицы, но с разным префиксом, например,wp_2_posts. Здесь 2 это id подсайта.Для подстайтов создается следующий набор таблиц:
wp_2_options wp_2_posts wp_2_postmeta wp_2_comments wp_2_commentmeta wp_2_terms wp_2_termmeta wp_2_term_relationships wp_2_term_taxonomy wp_2_links
Механизмы хранения данных в MySQL
Механизм хранения - это часть базы данных, которая отвечает за чтение и запись данных. Начиная с версии MySQL 5.5, движком хранения по умолчанию является InnoDB. Это наиболее часто используемый механизм хранения данных, поскольку он имеет блокировку на уровне строк вместо полной блокировки на уровне таблицы (что очень важно при выполнении экспорта/резервного копирования mysqldump), поддерживает транзакции (позволяя фиксировать и откатывать SQL-запросы), а также имеет полную поддержку внешних ключей и ограничений отношений.
MyISAM был механизмом хранения данных, который в прошлом использовался в WordPress, и, возможно, у вас все еще есть старые сайты WordPress, работающие на нем. Некоторые сайты могут даже иметь смесь таблиц, использующих как MyISAM, так и InnoDB.
Совет: Конвертируйте MyISAM в InnoDB с помощью phpMyAdmin, чтобы повысить производительность базы данных.
Возможно, вы сталкивались с проблемами кодировки символов при переносе базы данных WordPress с одного сервера на другой и задавались вопросом, что это за наборы символов и коллизии, которые упоминаются в статьях поддержки. Так что же такое наборы символов и коллизии?
Набор символов MySQL - это набор символов, допустимых в строке. В алфавите 26 символов - от a до z. Каждой букве присвоен номер, например, a = 1, b = 2, c = 3 и так далее. Буква - это символ, а связанное с ней число - кодировка.
Комбинация всех букв от a до z и соответствующих им цифровых кодировок составляет набор символов. MySQL поддерживает множество наборов символов, которые позволяют хранить практически любой символ в строке.
MySQL collation - это набор правил, используемых для сравнения символов в определенном наборе символов. Для сравнения строк база данных использует номера кодировки символов. Примером правила коллирования является коллирование без учета регистра, когда строки сравниваются, даже если они состоят из символов нижнего или верхнего регистра. Коллизии могут быть довольно сложными, как описано в документации MySQL:
большинство collations имеют множество правил, не только для различения регистра букв, но и для различения акцентов ("акцент" - это знак, прикрепленный к символу, как в немецком
Ö), а также для сопоставления нескольких символов (например, правило, согласно которомуÖ = OEв одной из двух немецких колляций).
MySQL позволяет задавать наборы символов и колляции на четырех уровнях: сервер, база данных, таблица и колонка.
Для сайтов WordPress рекомендуемый набор символов - utf8mb4, а рекомендуемая коллизия - utf8mb4_unicode_520_ci. В WordPress 4.2 таблицы были переведены с кодовой таблицы utf8 на utf8mb4, что позволяет хранить 4-байтовые символы, а это значит, что в базе данных можно хранить любые символы Unicode. Peter Tasker написал отличное руководство для разработчиков о том, как работает Unicode.
- Различия MySQL и MariaDB: https://kinsta.com/blog/mariadb-vs-mysql/
- Полезная статья про таблицы ВП: https://deliciousbrains.com/tour-wordpress-database/
