WordPress как на ладони

Типы контента (сущности) в WordPress

Из коробки в WordPress существует пять основных типов контента (типов данных, сущностей):

  • Записи
    • Посты
    • Страницы
    • Произвольные типы записей - register_post_type()
    • Вложения (медиа данные)
    • Ревизии
    • Элементы навигационного меню
  • Комментарии
  • Таксономии (термины)
    • Категории
    • Метки
    • Произвольные таксономии - register_taxonomy()
  • Пользователи
  • Метаданные
    • могут быть у всех перечисленных выше сущностей.

Все эти данные хранятся в Базе данных, поэтому предлагаю посмотреть на структуру таблиц базы данных WordPress:

WordPress в качестве базы данных использует MySQL v5.7 или выше, ИЛИ MariaDB v10.3 или выше.

Ниже все таблицы имеют дефолтный префикс wp_. У вас этот префикс может быть другой - его можно изменить в файле wp-config.php, там он указывается в переменной:

$table_prefix = 'wp_';

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

Таблицы WordPress (обычная установка)

Схема базы данных 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.

4 комментария
    Войти