Работа с данными в WordPress

WordPress сайт состоит из трех основных элементов:

  • Собственно установленный WordPress;
  • Содержимое папки wp-content, которое включает в себя темы, плагины и загружаемые материалы;
  • База данных, в которой хранится весь контент.

Большинство пользователей WordPress никогда не имеют дела непосредственно с базой данных, и могут даже быть не в курсе, что она постоянно задействуется при наполнении их сайта.

Когда WordPress обслуживает любую страницу, будь-то домашняя страница, одиночная запись, страница, или архив, система осуществляет доступ к базе данных, чтобы сохранить контент, который редакторы и администраторы добавили на сайт.

В этой серии статей я подробно рассмотрю различные аспекты работы базой данных WordPress. Серия будет включать в себя девять частей, охватывающих следующие темы:

  • Введение.
  • Связь между данными.
  • Типы контента.
  • Данные пользователей.
  • Метаданные.
  • Таксономии, категории, теги и термины.
  • Таксономии метаданных записей.
  • Таблицы опций.
  • Данные групповой установки сайтов WordPress.

В этом вступлении я приведу обзор таблиц базы данных и того, как они связаны с типами контента, который вы можете использовать при работе с WordPress. А также того, как определить, что где хранится.

Типы контента в WordPress

Так как таблицы базы данных используются для хранения контента, прежде чем вы сможете разобраться с таблицами, необходимо разобраться с контентом. В WordPress существует несколько типов контента:

  • записи;
  • страницы;
  • записи пользовательского типа;
  • вложения;
  • ссылки;
  • пункты меню навигации (которые хранятся в виде отдельных записей).

Этим типам контента затем назначаются следующие данные:

  • категории;
  • теги;
  • пользовательские таксономии и термины;
  • метаданные записей.

Существует еще ряд дополнительных типов контента:

  • виджеты;
  • опции;
  • пользователи;
  • сайты (для групповой установки сайтов);
  • жестко забитый в код контент (добавляется в тему или плагин);
  • контент, полученный извне (контент третьей стороны, полученный через каналы, стриминг или другими способами).

Все эти типы контента хранятся в разных местах базы данных (или в некоторых случаях в файлах тем или плагинов). Они могут содержаться в собственных записях или же могут являться частью другого элемента (например, потоковых данных, закодированных в записи).

Кроме того, они могут быть связаны с данными других таблиц. Например, данные о записях будут связаны с данными о пользователях, таким образом, WordPress знает, кто является автором любой записи.

Структура базы данных WordPress

WordPress использует ряд таблиц базы данных, связанных между собой, чтобы свести к минимуму объем данных, который должен быть сохранен - это создает связь один-для-всех. То есть, скажем, один пользователь может иметь много записей, автором которых он является – все они связаны с записью пользователя.

Это позволяет экономить ресурсы - если бы WordPress хранил все пользовательские данные для каждого пользователя для каждой его записи, это бы означало много повторяющихся данных и много занятого дискового пространства.

На приведенной ниже схеме, данные для которой взяты из Кодекса WordPress, показано, как связаны между собой различные таблицы базы:

Структура базы данных WordPress

Большинство таблиц связано с одной или несколькими другими таблицами через одно поле. Это поле будет уникальным идентификатором для каждой записи, например, post_id. Более подробно это показано в данной таблице:

ТаблицаХранимые данныеС чем связана
wp_postsЗаписи, страницы, вложения, ревизии и элементы меню навигации.wp_postmeta (через post_id)
wp_term_relationships(viapost_id)
wp_postmetaМетаданные для каждой записи.wp_posts (через post_id)
wp_commentsКомментарии.wp_posts (через post_id)
wp_commentmetaМетаданные для каждого комментария.wp_comments (через comment_id)
wp_term_relationshipsСвязи между записями и таксономиями.wp_posts (через post_id)
wp_term_taxonomy (черезterm_taxonomy_id)
wp_term_taxonomyТаксономии (в том числе категории и теги).wp_term_relationships(через term_taxonomy_id
wp_termsВаши собственные категории и теги, а также термины, назначенные пользовательским таксономиям.wp_term_taxonomy (черезterm_id)
wp_linksСсылки в вашей ленте блога (если таковые имеются).wp_term_relationships(через link_id)
wp_usersПользователи.wp_posts (через post_author)
wp_user_metaМетаданные для каждого пользователя.wp_users (через user_id)
wp_optionsНастройки сайта и опции (задаются через панель настроек и через плагины и темы).

Несколько вещей, которые стоит отметить:

  • Таблицы базы данных по умолчанию имеют префикс wp_. Вы можете изменить это при настройке вашего сайта, однако возможных вариантов в вашем распоряжении будет не так много;
  • Основной таблицей является таблица wp_posts, в ней будет храниться основная часть ваших данных. Она связывает воедино почти все остальные таблицы;
  • Только одна таблица не связана ни с одной другой - wp_options. В этой таблице хранятся данные о сайте и о системе WordPress, не связанные с данными о записях или пользователях;
  • Две таблицы используются для хранения данных о таксономии - об этом я подробнее расскажу в следующих статьях данной серии;
  • Таблицы wp_users и wp_comments не связаны между собой, хотя можно указать, что пользователи должны быть зарегистрированы, чтобы оставлять комментарии, WordPress не хранит данные о комментариях для каждого пользователя, который их оставил;
  • Групповая установка сайтов подразумевает некоторые дополнительные таблицы. Я не включила их сюда, так как это выходит за рамки данной статьи.

Связь контента с таблицами базы данных

Ознакомившись с типами контента WordPress и таблицами базы данных, используемыми для их хранения, теперь мы можем рассмотреть их связь друг с другом.

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

Тип контентаТаблицы
записи wp_posts
страницы wp_posts
записи пользовательского типа wp_posts
вложения wp_posts
ссылки wp_links
элементы меню навигации wp_posts
категории wp_terms
теги wp_terms
пользовательские таксономии wp_term_taxonomy
термины таксономии wp_terms
метаданные записей wp_post_meta
виджеты wp_options
опции wp_options
пользователи wp_users
жестко забитый в код контент wp_posts (если добавляется в записи).
wp_options (если добавляется в виджеты).
Файлы тем и плагинов (если они жестко забиты в код).
сторонний контент wp_posts (если добавляется в записи).
wp_options (если добавляется в виджеты или плагины).
Файлы тем и плагинов (если они жестко забиты в код).

Вы, возможно, обратили внимание, что не все таблицы базы данных включены в этот перечень. Причина этого заключается в том, что некоторые из них используются для хранения метаданных, а другие используются для хранения связей между несколькими типами контента, о чем я более детально расскажу в следующих статьях этой серии.

Заключение

Надеюсь, теперь вы лучше представляете, как и где WordPress хранит различные типы данных, используя структуру базы данных. В этой серии статей мы подробно рассмотрим различные аспекты данной темы.

В следующей части я рассмотрю связь между данными, и остановлюсь более подробно на том, как конкретные таблицы связаны между собой, и как некоторые из них используются исключительно для хранения данных о связях.

РедакцияПеревод статьи «Understanding and Working with Data in WordPress»