Типы контента (сущности) в WordPress
Из коробки в WordPress существует пять основных типов контента (типов данных, сущностей):
- Записи
- Посты
- Страницы
- Произвольные типы записей - register_post_type()
- Вложения (медиа данные)
- Ревизии
- Элементы навигационного меню
- Комментарии
- Таксономии (термины)
- Категории
- Метки
- Произвольные таксономии - register_taxonomy()
- Пользователи
- Метаданные
- могут быть у всех перечисленных выше сущностей.
Все эти данные хранятся в Базе данных, поэтому предлагаю посмотреть на структуру таблиц базы данных WordPress:
Build In PostWordPress в качестве базы данных использует 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_id
ID сайта, аsite_id
ID сети сайтов. Это легаси WP 2.x, когда 'сайт' назывался 'блог'. Так, когда вы добавляете новый под-сайт (блог), будет добавлена новая запись в таблицу wp_blogs с новым значением blog_id и тем же самым site_id.Поле Тип Ключ Умолчание Описание blog_id bigint(20) PK: blog_id Уникальный идентификатор блога. site_id bigint(20) 0 Идентификатор сети, к которой принадлежит блог. domain varchar(200) K: domain Доменное имя блога. path varchar(100) K: domain Путь блога относительно домена. registered datetime '0000-00-00 00:00:00' Дата и время регистрации блога. last_updated datetime '0000-00-00 00:00:00' Дата и время последнего обновления блога. public tinyint(2) 1 Флаг, указывающий, является ли блог публичным (1) или приватным (0). archived tinyint(2) 0 Флаг, указывающий, архивирован ли блог (1) или нет (0). mature tinyint(2) 0 Флаг, указывающий, содержит ли блог взрослый контент (1) или нет (0). spam tinyint(2) 0 Флаг, указывающий, помечен ли блог как спам (1) или нет (0). deleted tinyint(2) 0 Флаг, указывающий, удален ли блог (1) или нет (0). lang_id int(11) K: lang_id 0 Идентификатор языка блога. - wp_blogmeta
Появилась в WP 5.1. Хранит метаданные, связанные с блогами - служебная информация о блогах. Например: db_version, db_last_updated. С появлением этой таблицы вам не нужно использовать таблицу wp_options для хранения некоторых данных о под-сайте и каждый раз использовать switch_to_blog(), когда такие данные нужны.
Поле Тип Ключ Умолчание Описание meta_id bigint(20) unsigned PK: meta_id Уникальный идентификатор метаданных. blog_id bigint(20) K: blog_id 0 Идентификатор блога, к которому относятся метаданные. meta_key varchar(255) K: meta_key NULL Ключ метаданных. meta_value longtext NULL Значение метаданных. - wp_registration_log
Логирует регистрации новых блогов в сети. Содержит данные, когда был зарегистрирован блог сети.
В этой таблице регистрируются пользователи, которые регистрируют новый сайт после его активации.Поле Тип Ключ Умолчание Описание ID bigint(20) PK: ID Уникальный идентификатор записи. email varchar(255) Email-адрес, использованный при регистрации. IP varchar(30) K: IP IP-адрес, с которого была произведена регистрация. blog_id bigint(20) 0 Идентификатор блога, связанного с регистрацией. date_registered datetime '0000-00-00 00:00:00' Дата и время регистрации. - wp_signups
Хранит информацию о заявках на регистрацию новых пользователей и сайтов.
Содержит пользователей, которые были зарегистрированы через базовую регистрацию WordPress со страницы:
Администрация > Супер Админ > Настройки
.Также в этой таблице хранятся данные о под-сайтах (блогах), которые были зарегистрированы, но не активированы. Когда сеть позволяет регистрировать новые сайты. После активации сайта, запись удаляется и создается запись в wp_blogs.
Поле Тип Ключ Умолчание Описание signup_id bigint(20) PK: signup_id Уникальный идентификатор заявки. domain varchar(200) K: domain Доменное имя, запрошенное при регистрации. path varchar(100) K: domain Путь, запрошенный при регистрации. title longtext Название блога, указанное при регистрации. user_login varchar(60) K: user_login Логин пользователя, указанный при регистрации. user_email varchar(100) K: user_email Email пользователя, указанный при регистрации. registered datetime '0000-00-00 00:00:00' Дата и время регистрации. activated datetime '0000-00-00 00:00:00' Дата и время активации. active tinyint(1) 0 Флаг, указывающий, активен ли пользователь (1) или нет (0). activation_key varchar(50) K: activation_key Ключ активации пользователя. meta longtext Дополнительные метаданные о регистрации. - wp_site
Содержит информацию о сетях (основные сайты сети).
Эта таблица всегда будет содержать одну сеть, хотя структура таблицы позволяет использовать несколько сетей в одной базе данных. Это не было реализовано в самом WordPress, но может быть реализовано с помощью плагинов, например: WP Multi Network или Networks for WordPress.
Поле Тип Ключ Умолчание Описание id bigint(20) PK: id Уникальный идентификатор сайта. domain varchar(200) K: domain Доменное имя сайта. path varchar(100) K: domain Путь сайта относительно домена. - wp_sitemeta
Хранит метаданные, связанные с сетями (сайтами) - опции сети и общие опции для всех её сайтов.
Эта таблица похожа на wp_options, только здесь хранятся опции для всей сети сайтов, а не для конкретного под-сайта. Здесь хранится конфигурация (опции), связанные с сетью, а также другие данные, например, настройки плагинов, которые должны быть доступны для всей сети (для любого сайта сети).
Поле Тип Ключ Умолчание Описание meta_id bigint(20) PK: meta_id Уникальный идентификатор метаданных. site_id bigint(20) K: site_id 0 Идентификатор сайта, к которому относятся метаданные. meta_key varchar(255) K: meta_key NULL Ключ метаданных. meta_value longtext NULL Значение метаданных. - 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/