Таблицы (структура) Базы Данных 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
- Данные всех под-сайтов сети хранятся в этой таблице.
- wp_blogmeta
- Появилась в WP 5.1. Тут храниться служебная информация о блогах. Например: db_version, db_last_updated. С появлением этой таблицы вам не нужно использовать таблицу wp_options для хранения некоторых данных о под-сайте и каждый раз использовать switch_to_blog(), когда такие данные нужны.
- wp_blog_versions
Содержит текущую версию базы данных каждого сайта. Данные обновляются при обновлении БД для каждого сайта сети.
При обновлении версии WordPress, на которой работает ваш сайт, иногда происходят изменения в базе данных. Обновление многосайтовой установки до новой версии WordPress внесет эти изменения в глобальные таблицы. Однако обновление также необходимо будет применить к набору таблиц для подсайтов в сети. В этой таблице записана версия базы данных каждого блога в сети, поэтому WordPress знает, какие блоги нуждаются в обновлении, и обновляет их после его запуска.
- wp_registration_log
- Содержит данные, когда был зарегистрирован блог сети.
В этой таблице регистрируются пользователи, которые регистрируют новый сайт после его активации. - wp_signups
Содержит пользователей, которые были зарегистрированы через базовую регистрацию WordPress со страницы:
Администрация > Супер Админ > Настройки
.В этой таблице хранятся данные о блогах, которые были зарегистрированы, но не активированы, когда сеть позволяет регистрировать новые сайты. После активации сайта запись удаляется и создается запись в wp_blogs.
- wp_site
Содержит, адреса основных сайтов.
Эта таблица всегда будет содержать одну сеть, хотя структура таблицы позволяет использовать несколько сетей в одной базе данных. Это не было реализовано в самом WordPress, но может быть реализовано с помощью плагинов, например: WP Multi Network или Networks for WordPress.
- wp_sitemeta
Данные сайтов: различные опции, включая администратора сайта.
Эта таблица похожа на wp_options, только - это опции работающие для всей сети сайтов а не для конкретного под-сайта. Здесь хранится конфигурация (опции), связанные с сетью, а также другие данные, например, настройки плагинов, которые должны быть доступны для всей сети (для любого сайта сети).
- wp_users
- Список пользователей всех сайтов сети. Это общая таблица пользователей для всей сети. Это привычная таблица, только в мультисайт версии добавляются еще 2 поля: spam и delete.
- wp_usermeta
- Содержит мета-данные пользователей. Настройки пользователя для разных сайтов сети.
- Базовые таблицы каждого сайта сети
Таблицы сайта сети: 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/