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

Все сведения о настройках внешнего вида и содержании сайта WordPress хранит в реляционной базе данных. Поддерживается только MySQL версии 5.0.15 или выше, или любая версия MariaDB. Обычно WordPress и плагины взаимодействует с этой базой данных самостоятельно, и конечному пользователю не нужно сильно беспокоиться о ее структуре. Однако, для разработки собственного плагина или иного взаимодействия с содержимым сайта важно точно знать, как WordPress хранит свои данные. Зная структуру данных и обладая доступом к DB можно получить и/или изменить любые сведения, содержания, структуры и представления непосредственно в таблицах, не используя консоль WordPress и даже без авторизации на самом сайте.

Официально Описание Структуры Базы Данных предыдущей версии WordPress 4.4 доступно на //codex.wordpress.org, где также есть ссылка на описание еще более ранних версий WordPress 1.5, 2.0, 2.2, 2.3, 2.5, 2.7, 2.8, 2.9 и 3.3.

Ниже в публикации описана структура данных WordPress 5.2.4 актуальная на 10 октября 2019 года.

Таблицы

Кликни меня

Базовый набор WordPress включает 12 таблиц в довольно простой схеме (для которой, к тому же, фактически не обеспечивается целостность данных):

  • wp_options: простая и самостоятельная, в текстовых option_value в свободной форме хранятся настройки WordPress, параметры консоли, плагинов.
  • wp_users: зарегистрированные пользователи, логины, хэш паролей и прочее, связана по user_id с другими таблицами;
  • wp_usermeta: простая, подчинена wp_users, хранит в текстовых meta_value в свободной форме хранятся метаданные зарегистрированных пользователей, персональные настройки, данные профиля, цветовая схема, контактные данные, биография, никнейм и другие.
  • wp_posts: хранит весь содержательный контент в текстовом post_content и его главные атрибуты (автора, тип, статус, mime и прочее), связана по post_id с другими таблицами.
  • wp_postmeta: хранит разные метаданные о контенте по произвольным текстовым ключам meta_key в текстовом meta_value в свободной форме, информацию о прикреплённых файлах (изображения, документы, видео), данные заполняемых полей при создании или редактировании записей, используется плагинами.
  • wp_terms: хранит термины и их UTF-8 представления, которые служат категориями, метками и другими терминами пользовательских таксономий.
  • wp_termmeta: метаданные терминов, которые используются только плагинами.
  • wp_term_relationships: хранит связи категорий и меток таблицы wp_terms и эта связь здесь поддерживается.
  • wp_term_taxonomy: хранит таксономии (категории, теги) для записей в таблице wp_terms и устанавливается очередность и вложенность категорий.
  • wp_comments: комментарии и основные данные (имя автора, еМейл, IP, браузер).
  • wp_commentmeta: метаданные комментариев, используется плагинами.
  • wp_links: устарела и используется редкими плагинами для внутреннего менеджмента ссылок.

wp_posts

Несмотря на то, что в названии стоит “пост”, эта таблица содержит все виды постов, или же все виды контента. Эта таблица содержит все посты, страницы, корректировки и кастомные типы постов.

Field Type Length Not NULL Comment
ID bigint 20 + Уникальный идентификатор поста
post_author bigint 20 + Идентификатор автора связывает с таблицей wp_users, 0 означает отсутствие автора
post_date datetime 0 + Дата и время создания поста
post_date_gmt datetime 0 + Дата и время создания поста по Гринвичу (GMT) (ГГГГ-ММ-ДД ЧЧ:ММ:СС)
post_content longtext 0 + Текст содержания поста
post_title text 0 + Заголовок
post_excerpt text 0 + Выдержка из записи (отрывок текста)
User-defined post excerpt // Для ваших цитат из поста.
post_status varchar 20 + Статус поста

  • publish — опубликованный пост. Доступен на сайте для просмотра каждому. Этот статус присваивается записям при нажатии на кнопку «Опубликовать».
  • future — пост, запланированный на публикацию в будущем. Для того, чтобы присвоить записи этот статус, устанавливаем время публикации, которое ещё не наступило и нажимаем кнопку «Запланировать».
  • draft — черновики (записи, которые ещё находятся в процессе написания и не готовы к публикации). Для создания черновика нажмите кнопку «Сохранить».
  • pending — пост, ожидающий проверки редактором или администратором. Все записи пользователей с ролью «Участник» отправляются на модерацию.
  • private — посты, доступные для просмотра и редактирования только администраторам.
  • trash — посты, находящиеся в корзине. Для того, чтобы переместить пост в корзину, нажмите на ссылку «Удалить».
  • auto-draft — черновики, которые создаются автоматически в процессе редактирования постов.
  • inherit — этот статус присваивается всем вложениям, а также редакциям записей.
comment_status varchar 20 + Статус комментирования

  • open 291
  • closed 1978
  • egistered_only
ping_status varchar 20 + Статус пингов и трекбеков

  • open 94
  • closed — отключает pingbacks или trackbacks
post_password varchar 255 + Пароль защиты поста, в качестве которого может служить любая строка (без какого-либо шифрования). Пароль будет запрашиваться перед отображением страницы. Пустой пароль означает отсутствие защиты.
post_name varchar 200 + Приставка к URL записи, slug, ее видно в URL, если включена опция ЧПУ (из значения post_title удаляются все знаки, а пробелы заменяют минусом), использует кодировку UTF-8, :
240
blueeye
queue
ru-myth
2117-autosave-v1
192-revision-v1user
%d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82-%d0%bc%d0%b8%d1%80
to_ping text 0 + URL’ы для пингов
pinged text 0 + URL’ы, которые уже были «пропингованы»
!!! несколько УРЛей и половина на себя:
http://mir-anti-vir.org/kljuchi-dlja-antivirusov/kody-aktivacii-dlya-eset-smart-security-9-ess-9/
http://mir-anti-vir.org/kljuchi-dlja-antivirusov/klyuchi-dlya-antivirusov-kaspersky/

Управление электропитанием Windows

Управление правами на запуск приложений Windows

Ссылки NTFS

Настройка сканеров штрихкодов


http://asp24.com.ua/blog/nastroika-ppp-interfeisov-i-serverov-v-mikrotik/

post_modified datetime 0 + Дата и время изменения по местному времени
post_modified_gmt datetime 0 + Дата и время по Гринвичу (GMT) (ГГГГ-ММ-ДД ЧЧ:ММ:СС)
post_content_filtered longtext 0 + пустой
post_parent bigint 20 + ID родительской записи (для страниц, вложений и т.п.)
0 (x174)
192 (x120)
127 (x90)
guid varchar 255 + Cсылка на запись. Примечание: не всегда GUID это постоянная (неизменяемая) ссылка на запись (как это было до версии 2.5). Можно сказать, что это текущая ссылка на конкретную запись.
!!! локальные URL, многие не работают
menu_order int 11 + Число определяющее «рейтинг» записи (влияет на порядок вывода страниц в списке)
post_type varchar 20 + Тип поста. Существует 5 предустановленных типа:

  • post — обычный пост, также используется для создания RSS-каналов. Имеет 2 предустановленных таксономии: рубрики, они же категории (category) и метки, они же теги (post_tag).
  • page — Страницы используются, в основном, в роли служебных страниц, посадочных страниц — лендингов, сборника энциклопедии и тому подобного. Имеют древовидную иерархию, то есть могут быть вложенными друг в друга, что отразится в адресе конечной страницы (ярлыки родительских будут присутствовать в цепочке URL), и в этой роли имеется возможность выставить им приоритет в сортировке, обычно страницы не используют категории и теги.
  • attachment — вложения, служебный тип, предназначенный для хранения информации о файлах (изображениях, аудио, видео и тому подобных), которые загружались через загрузчик в стандартном редакторе WordPress при редактировании Записи, Страницы или подобного: размер, вес, описание, к какому посту или странице прикреплены, и тому подобное, вложения также используют таблицу wp_postmeta для хранения дополнительной информации, такой как метаданные для изображений и видео, которые вы добавили.
  • revision — версия записи, которая создается автоматически, можно сравнить две разные версии, и к нужной можно откатиться назад, число сохраняемых версий Ревизий можно изменить.
  • nav_menu_item — элемент навигационного меню, тип записей, который хранит информацию об отдельной команде в навигационном меню WordPress. Первый, и пока единственный тип записи, который используется не как остальные типы записей, данные для работы и отображения на сайте получают свои отдельные функции.

Зарезервированные типы:

  • action
  • theme
  • order

Источник: а //sheensay.ru

Пользовательские Произвольные типы:

  • popup_theme (x6)
  • tinymcetemplates (x3)
  • acf-field 2
  • popup 2
  • jp_img_sitemap 1
  • acf-field-group 1
  • option-tree 1
  • jp_sitemap 1
  • jp_sitemap_master 1
  • customize_changeset 1
post_mime_type varchar 100 + Mimе-тип (для вложений, проч.)
2088
image/gif 81
image/png 69
image/jpeg 30
image/x-icon 1
comment_count bigint 20 + счетчик числа комментариев

wp_postmeta

Эта таблица содержит метаинформацию о ваших постах, страницах и кастомных типах постов. Пример метаинформации о посте – шаблон, который используется для отображения страницы, кастомные поля и т.д. Некоторые плагины также используют эту таблицу для хранения данных плагина, таких как информация о SEO WordPress.

Field Type Length Not NULL Comment
meta_id bigint 20 +
post_id bigint 20 +
meta_key varchar 255
  • _wp_old_slug — предыдущий адрес поста после изменения, приводит к коду сервера 200 и перенаправлению на новый адрес
  • _thumbnail_id — идентификатор миниатюры поста
  • _wp_page_template ={‘default’,’page-templates/full-width.php’} — устанавливает шаблон страницы
  • _wp_attached_file — прикрепленное изображение
  • _wp_attachment_context
  • _wp_attachment_backup_sizes
  • _wp_attachment_metadata 180
  • _wp_attachment_is_custom_header 2
  •  мусор
    • _edit_lock — сведения о блокировке редактирования
    • _edit_last — сведения о последнем изменении

метаданные элементов меню:

  • _menu_item_type ={taxonomy, post_type, custom}
    • taxonomy — тип элемента меню таксономия
    • post_type — тип элемента меню пост
    • custom
  • _menu_item_menu_item_parent — id родительской записи элемента многоуровневого меню
  • _menu_item_object_id — id идентификатора (рубрики, страницы или поста, в зависимости от типа)
  • _menu_item_object ={category, post, page, custom}
    • category — тип объекта меню Рубрика
    • post — тип объекта меню Пост
    • page — тип объекта меню Страница
    • custom — тип объекта меню Произвольная ссылка
  • _menu_item_url — ссылка (если _menu_item_type и _menu_item_object содержат ‘custom’)
  • _menu_item_classes — в известных случаях всегда содержит сериализацию ‘a:1:{i:0;s:0:»»;}’
  • _menu_item_target — в известных случаях всегда пусто
  • _menu_item_xfn — в известных случаях всегда пусто

неисследованные метаданные:

popup_settings 8727
_jetpack_related_posts_cache 75
_wpas_done_all 7
popup_theme_data_version 6
popup_theme_settings 6
_pum_built_in 6
_oembed_52ed1cf2c7952972bc4f350aa4b3cabb 3
popup_cookies 2
_sidebar_primary 2
FieldN1 2
_sidebar_secondary 2
_FieldN1 2
_layout 2
popup_open_count 2
data_version 2
popup_display 2
popup_title 2
_wp_attachment_custom_header_last_used_twentyfourteen-reks 1
_wp_attachment_custom_header_last_used_twentyfourteen 1
_oembed_time_0202c64b705836046939f61c596b3704 1
_wp_trash_meta_status 1
_wp_trash_meta_time 1
_oembed_time_c2d27ed9131e40ef4ac9e120bd4cb792 1
_pum_default_theme 1
_ 1
_heading 1
_wp_attachment_is_custom_background 1
postcode 1
_subheading 1

meta_value longtext 0 значение метаданных интерпретируются в зависимости от значения в поле meta_key

a:31:{s:17:»»disable_on_mobile»»;…;} 8725
{{unknown}} 232
2 132
109
a:1:{i:0;s:0:»»»»;} 37
taxonomy 23
category 23
0 20
default 14
post_type 12
page 12
1 10

wp_comments

//Как можно догадаться по названию, эта таблица содержит комментарии на вашем WordPress. Она содержит имя автора комментария, его url, имейл, сам комментарий и т.д.

Field Type Length Not NULL Comment
comment_ID bigint 20 + Идентификатор комментария
comment_post_ID bigint 20 + Идентификатор поста wp_posts.post_id
comment_author tinytext 0 + Произвольное имя автора
comment_author_email varchar 100 +
comment_author_url varchar 200 +
comment_author_IP varchar 100 +
comment_date datetime 0 +
comment_date_gmt datetime 0 +
comment_content text 0 + Содержание комментария
comment_karma int 11 +
comment_approved varchar 20 + spam 144
trash 119
1 9
comment_agent varchar 255 + «Браузер» которым комментарий был оставлен
comment_type varchar 20 + //название типа комментария. Названия можно указывать произвольные.Комментарии в WordPress делятся на типы: обычный комментарий, Trackback или Pingback.
trackback 263
<>7
pingback 2
comment_parent bigint 20 + Идентификатор родительского комментария в иерархии
user_id bigint 20 + Идентификатор авторизованного автора комментария (wp_users.user_id)

wp_commentmeta

Эта таблица содержит информацию о комментариях, опубликованных на сайте WordPress. В этой таблице есть четыре разных поля – meta_id, comment_id, meta_key и meta_value. Каждый meta_id связан с comment_id. Пример метаинформации комментария – его статус (одобрен, рассматривается, удален и т.д.).

Field Type Length Not NULL Comment
meta_id bigint 20 + идентификатор                                                                                                                                                                                                   .
comment_id bigint 20 +
meta_key varchar 255
meta_value longtext 0

wp_terms

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

Field Type Length Not NULL Comment
term_id bigint 20 + идентификатор термина
name varchar 200 + термин
slug varchar 200 + термин в кодировке UTF-8
term_group bigint 10 + Устаревшее поле, больше не используется

В частности wp_terms содержит:

  • рубрики (name — название рубрики, slug — ярлык рубрики в UTF-8)
  • меню (name — название меню, slug — название меню в нижнем регистре в кодировке UTF-8)

Вид (назначение) каждой записи определено в таблице wp_term_taxonomy

wp_termmeta

//Содержит метаданные терминов. Эта таблица дополняет таблицу wp_terms.
В wp_termmeta принято сохранять любые дополнительные данные термина, например это могут быть СЕО поля: заголовок, описание и что угодно еще.
Структуру таблица имеет такую же, как и другие таблицы метаданных: wp_postmeta, wp_commentmeta, wp_usermeta. Логика хранения, кэширования и получения метаданных WP едина для всех типов метаданных: посты, таксы, комменты, юзеры (об этом написал отдельную статью).
По умолчанию, эта таблицы не задействована и всегда пуста. Она используется при расширении базовых возможностей WP, как правило плагинами.

wp_term_taxonomy

Эта таблица определяет таксономии для terms в таблице wp_terms. Например, если у вас есть term “Туториалы WordPress”, то в этой таблице будут содержаться данные, в которых будет указано, что он относится к таксономии “категории”. Другими словами, в этой таблице находятся данные, помогающие WordPress различать между terms и определять, какой из них является категорией, тэгом и т.д.

Field Type Length Not NULL Comment
term_taxonomy_id bigint 20 + Идентификатор таксономии
term_id bigint 20 + Идентификатор термина
taxonomy varchar 32 + Вид таксономии термина

  • nav_menu — меню
  • category — рубрика
  • post_tag 113
  • post_format 1
description longtext 0 + Описание таксономии
parent bigint 20 + Идентификатор родительского термина для древовидных таксономий
count bigint 20 + Счетчик количества записей в термине

wp_term_relationship

Эта таблица отвечает за соотношение между типами постов WordPress и terms в таблице wp_terms. Эта таблица помогает WordPress определить пост X в категорию Y.

Field Type Length Not NULL Comment
object_id bigint 20 + //Содержит ID записи (значение поля ID из таблицы wp_posts). Если включена поддержка ссылок, то также будет содержать ID ссылки из таблицы wp_links.
term_taxonomy_id bigint 20 + //Содержит значение такого же поля из таблицы wp_term_taxonomy.
term_order int 11 + //Содержит порядок в котором были указаны термины, при прикреплении их к записи. Например, при редактировании записи мы указали ей 2 рубрики и 3 метки, вот в каком порядке мы их видим (они передались в POST запросе), такие значения сюда будут записаны: 1, 2 для рубрик, и 1, 2, 3 для меток.По умолчанию эта функция отключена для всех встроенных таксономий (поле содержит 0). Чтобы её включить, нужно указать параметр sort при регистрации таксономии, см. register_taxonomy().

wp_options

Эта таблица содержит большую часть настроек вашего сайта WordPress, таких как: url сайта, имейл админа, дефолтная категория, количество постов на странице, формат времени и многое другое. Таблица опций также используется множеством плагинов WordPress для хранения настроек плагинов.

Field Type Length Not NULL Comment
option_id bigint 20 +
option_name varchar 191 //
option_tree_settings: 29178B
wp_user_roles: 3160B
crayon_options: 2313B
cron: 2215B
option_tree: 1875B
stats_cache: 1706B
fs_accounts: 1688B
jetpack_available_modules: 1223B
jetpack_plugin_api_action_links: 1073B
gglnltcs_options: 969B
theme_mods_twentyfourteen: 936B
option_value longtext 0 + //Каждая запись в поле option_name будет представлять собой уникальное значение: если вы добавите более одного значения к опции, WordPress сохранит их в виде массива в поле option_value. Прекрасный пример этого: опция active_plugins, которая хранит массив плагинов, активированных на сайте.
autoload varchar 20 + //определяет, будет или нет та или иная опция загружаться в функцию wp_load_alloptions(). Автозагружаемые данные – это данные, которые загружаются на каждой странице вашего WordPress-сайта. Ситуация здесь такая же, как и со скриптами – далеко не всегда они должны загружаться на всех страницах сайта. Атрибут autoload по умолчанию ставится в «yes», однако теоретически далеко не каждому плагину требуется загружать свои данные на каждой странице.

wp_users

Содержит информацию о пользователях, такую как имя пользователя, пароль, имэйл и т.д.

Field Type Length Not NULL Comment
ID bigint 20 + Идентификатор
user_login varchar 60 + Логин
user_pass varchar 255 + Хэш пароля (по умолчанию 128-битный MD5)
user_nicename varchar 50 + Имя пользователя /Если не указать, будет как логин.
user_email varchar 100 +
user_url varchar 100 +
user_registered datetime 0 + Дата и время регистрации
user_activation_key varchar 255 + ключ активации пользователя
user_status int 11 + статус, хранящийся в виде числа – с его помощью можно определить, подтвердил ли пользователь регистрацию по почте, к примеру. Он не сохраняет пользовательские роли.
display_name varchar 250 + Публичное имя пользователя

wp_usermeta

Содержит метаинформацию о пользователях вашего сайта.

Field Type Length Not NULL Comment
umeta_id bigint 20 +
user_id bigint 20 +
meta_key varchar 255 nickname 4
first_name 4
last_name 4
description 4
rich_editing 4
comment_shortcuts 4
admin_color 4
use_ssl 4
show_admin_bar_front 4
wp_capabilities 4
wp_user_level 4
dismissed_wp_pointers 3
wp_dashboard_quick_press_last_post_id 3
wp_user-settings 3
wp_user-settings-time 3
locale 2
default_password_nag 2
session_tokens 2
users_per_page 1
AtD_check_when 1
closedpostboxes_page 1
AtD_guess_lang 1
show_welcome_panel 1
metaboxhidden_page 1
AtD_ignored_phrases 1
vfb-form-settings 1
meta-box-order_page 1
closedpostboxes_post 1
screen_layout_page 1
metaboxhidden_post 1
_pum_reviews_dismissed_triggers 1
edit_comments_per_page 1
_pum_reviews_last_dismissed 1
_pum_dismissed_alerts 1
nav_menu_recently_edited 1
jetpack_tracks_anon_id 1
community-events-location 1
managenav-menuscolumnshidden 1
jetpack_tracks_wpcom_id 1
metaboxhidden_nav-menus 1
AtD_options 1
meta_value longtext 0

wp_links

//Ранее, до версии WP 3.5, а консоли WordPress было отдельное меню «Сссылки/Links». Можно было добавлять и группировать сторонние ссылки. Отвечал за управление ссылками устаревший плагин «Link Manager». Таблица wp_links собирала все данные по этим ссылкам. Сейчас используется некоторыми плагинами.
//Используется, чтобы управлять блогроллами в более ранних версиях WordPress или через плагин Link Manager.

Навигационные меню

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

  • красным — критерии полей, принадлежащих записям заголовков или элементов меню
  • синим — связи отношений таблиц
  • желтым — поля значения которых влияют на функционирование меню

В соответствии с моделью отношений элементов меню, полная выборка данных всех элементов всех меню сайта можно получить sql-выражением:

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

Заголовки навигационных меню

Меню является термином, поэтому заголовки меню хранятся в таблице wp_terms с остальными терминами. Чтобы найти идентификатор термина, соответствующего заголовку меню, следует в таблице wp_term_taxonomy выбрать записи, в которых поле taxonomy имеет значение ‘nav_menu’.

Пример запроса выбирает все существующие меню:

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

Активные меню

Меню сайта отображаются активной темой, которая задана в таблице wp_options значением поля option_value в записи, где поле option_name имеет значение ‘template’. Затем, необходимо получить настройки активной темы, которая хранится аналогично в записи, где поле option_name имеет значение имени активной темы с префиксом ‘theme_mods_’.

Пример запроса получает имя шаблона активной темы и строку ее настроек:

Полученное значение option_value является php-сериализацией структуры настроек активной темы, которая содержит в своем фрагменте php-массив вида:

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

Приведенный пример является фрагментом массива настроек темы Twentyfourteen. В этом массиве значение [‘primary’] содержит идентификатор меню, которое используется в качестве основного, а [‘secondary’] содержит идентификатор дополнительного меню. Подробное описание php-сериализации приведено в публикации СЕРИАЛИЗАЦИЯ И ДЕСЕРИАЛИЗАЦИЯ В ФОРМАТЕ PHP ДЛЯ 1С:ПРЕДПРИЯТИЕ 8.Х, но если не вдаваться в детали, то строковые значения идентификаторов следуют сразу после ‘s:7:»primary»;i:’ и ‘s:9:»secondary»;i:’ (в примере они равны 123 и 456 соответственно). При  необходимости значения идентификаторов можно без риска перезаписать другими значениями и записать в настройку. Например:

.

Элементы меню

Все элементы всех меню хранятся в таблице wp_posts в записях, у которых поле post_type имеет значение ‘nav_menu_item’. Принадлежность элементов к каждому меню определяется полем object_id таблицы wp_term_relationships в записях, где term_taxonomy_id равен идентификатору термина меню, при этом поле menu_order определяет сквозной порядок элементов (без учета иерархии):

Метаданные определяющие иерархию и тип элементов меню хранятся в таблице wp_postmeta, где для каждого элемента меню хранится несколько (обычно 8) записей, отличающихся по назначению полем meta_key.

Название элемента в меню навигации зависит от типа элемента, задаваемого значениями поле meta_value в записях ‘_menu_item_type’ и ‘_menu_item_object’.

Значения полей элементов меню в таблице wp_posts

Важные поля жирно выделены, обязательные поля с предопределенными значениями отмечены (∗):

wp_posts.<field> Описание значения
ID идентификатор элемента меню, обычно устанавливается автоматически, соответствует значениям wp_postmeta.post_id и wp_term_relationships.object_id
post_author содержит user_id пользователя создавшего элемент, по умолчанию содержит 0
post_date, post_date_gmt даты создания элемента, желательно установить их значениями NOW(), UTC_TIMESTAMP() при правильно установленном time_zone
post_content содержит описание связанного объекта (не всегда)

  • для элемента рубрики содержит текст описания wp_term_taxonomy.description
post_title надпись элемента меню (не всегда)

  • для страницы и поста копия названия из wp_posts.post_title
  • для рубрики, у которой нет описания
∗ post_excerpt должно быть установлено »
post_status по умолчанию содержит ‘publish’
∗ comment_status должно быть установлено ‘closed’
∗ ping_status должно быть установлено ‘closed’
post_name содержание варьируется по неочевидному принципу

  • повторяет значение .ID (обычно)
  • slug в кодировке UTF-8, обычно получается из .post_title удалением всех небуквенных символов и заменой пробелов на «-«
∗ to_ping должно быть установлено »
∗ pinged должно быть установлено »
post_modified, post_modified_gmt даты последнего изменения элемента, желательно установить их значениями NOW(), UTC_TIMESTAMP() при правильно установленном time_zone
∗ post_content_filtered должно быть установлено »
post_parent по умолчанию устанавливается 0, но иногда содержит число…
guid url элемента, по умолчанию »
menu_order сквозной порядковый номер элемента в меню влияет на порядок следования элементов
post_type должен содержать ‘nav_menu_item’

///

Значения полей метаданных элементов меню в таблице wp_postmeta

Основные значения метаданных приведены в таблице:

meta_key (строковое значение) meta_value (строковое значение)
‘_menu_item_type’ определяет тип элемента меню

  • ‘taxonomy’ — таксономия
  • ‘post_type’ — пост или страница
  • ‘custom’ — произвольный
‘_menu_item_object’ определяет тип объекта в зависимости от значения _menu_item_type

при _menu_item_type=’taxonomy’:

  • ‘category’ — тип объекта меню Рубрика

при _menu_item_type=’post_type’:

  • ‘post’ — тип объекта меню Пост
  • ‘page’ — тип объекта меню Страница

при _menu_item_type=’custom’:

  • ‘custom’ — тип объекта меню Произвольная ссылка
‘_menu_item_menu_item_parent’ id родительской записи элемента многоуровневого меню
‘_menu_item_object_id’ id идентификатора (рубрики, страницы или поста, в зависимости от типа элемента и объекта)
‘_menu_item_url’ url-ссылка (если _menu_item_type и _menu_item_object содержат ‘custom’)
‘_menu_item_classes’ в известных случаях всегда содержит сериализацию ‘a:1:{i:0;s:0:»»;}’
‘_menu_item_target’ в известных случаях всегда пусто
‘_menu_item_xfn’ в известных случаях всегда пусто

///

Практика применения прямого доступа к DB

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

Опции wp_options

Все установленные темы хранятся в записи, у которой option_name = «_site_transient_theme_roots», а набор установленных тем находятся в текстовом option_value в виде сериализации php-массива.

Настройки каждой установленной темы хранятся в записи, у которых option_name имеет префикс «theme_mods_…», а сами настройки находятся в текстовом option_value в виде сериализации php-массива. Запись с настройками может оставаться в таблице и после удаления темы, поэтому следует просмотреть все хранимые настройки sql-выражением:

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

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

Комментарии

Все спам-комментарии можно удалить зная о дурацкой черте спамеров начинать пост тэгом <strong>. Выражение удаления комментариев по признаку «<strong>…»

Если утрата этого «культурного наследия» недопустима, то для чтения перед сном их можно переложить в радел «Спам», руководствуясь тем же критерием:

Шифрование

Этот раздел здесь находится временно до того момента, когда все детали не будут установлено окончательно.

Поле wp_users.user_pass содержит хэш пароля вида $P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1. К настоящему момент удалось понять:

  • $P$ — указывает на открытый Portable PHP password hashing framework //www.openwall.com/phpass/
    • где доступны исходные тексты и примерами на C и PHP
  • Класс хеширования WordPress PasswordHash не описан, но есть полный исходник на //wp-kama.ru
  • Упоминаются различные алгоритмы шифрования, которые используют чуть отличную сигнатуру и определяют структуру на https://asecuritysite.com/encryption/phpass
    • описана структура $P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1
      • за сигнатурой следует параметр шифрования (иногда это степень числа циклов, но в этом случае это что-то другое)
      • 8 символов играют роль Salt соли
      • 16 символов — это 128 бит хэш
      • назначение еще 6 символов не понятно
  • в WordPress ответственный файл /public_html/wp-includes/pluggable.php содержит:
    • //$check = $wp_hasher->CheckPassword( $password, $hash );
  • установить принадлежность сигнатуры $P$B не удалось, но было подозрение, что это — BCrypt
  • документация к PHP 7 описывает применение функции password_hash ( string $password , int $algo [, array $options ] ) : string https://www.php.net/manual/ru/function.password-hash.php
  • Хэширование паролей в PHP 5.5 с использованием нового API + разные ссылки на //habr.com
  • небольшое обсуждение примера на WordPress ‘123456’ -> ‘$P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1’
    • рабочий пример:
  • (продолжение следует)

Источники

  • Официально: Описание структуры базы данных на //codex.wordpress.org
  • Официально: Справочник по функциям на //codex.wordpress.org
  • Управление базой данных WordPress с помощью phpMyAdmin – инструкция для начинающих на //www.coma.lv
  • Записи в WordPress на //wp-kama.ru
  • Метаданные в WordPress на //wp-kama.ru
  • Таксономии в WordPress на //wp-kama.ru
  • Опции WordPress (полный список) на //wp-kama.ru
  • Как работают уведомления (пинги, трэкбэки) в WordPress на //wp-kama.ru
  • Интеграция 1С и CMS WordPress посредством Rest API сайта
    • Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 1. Авторизация //infostart.ru
    • Первый шаг //infostart.ru
    • Шаг второй, публикация картинок //infostart.ru
    • Шаг третий, WooCommerce, публикация категорий товаров //infostart.ru

Одна мысль про “Структура данных WordPress”

Добавить комментарий