Статьи

База даних WordPress зсередини

  1. wp_posts
  2. wp_postmeta
  3. wp_users
  4. wp_usermeta
  5. wp_comments
  6. wp_options
  7. wp_categories
  8. wp_post2cat
  9. wp_links
  10. wp_link2cat

WordPress, як і більшість інших сучасних систем управління контентом, активно використовує базу даних
WordPress, як і більшість інших сучасних систем управління контентом, активно використовує базу даних. Вся інформація зберігається в ній - настройки блогу, записи, коментарі, посилання, інформація про користувачів і т.д. Тому необхідно розуміти, як база організована, які типи даних в ній зберігаються, і як різні речі взаємодіють один з одним.

Перед тим, як ми займемося детальним вивченням структури бази, я хочу звернути Вашу увагу на три наступні моменти:

1. WordPress API надає деякі можливості для управління даними без прямого звернення до бази. Тому, з технічного боку, Вам не потрібно знати, як база даних організована. Але якщо Ви маєте про це уявлення, можливо, Ви знайдете рішення, які будуть швидшими та ефективнішими для досягнення поставленої мети.

2. Структура бази даних WordPress проста і зручна. Боятися нема чого. Вона складається всього з 10 таблиць з декількома полями в кожній. Після побіжного ознайомлення структура залишиться у Вашій пам'яті.

3. Структура бази даних WordPress добре документована .

wp_posts

WordPress використовується в основному як система управління контентом (CMS). Тому, на мій погляд, таблиця з контентом має основне значення. Сторінки, записи, аттачменти, все це - контент, все це WordPress зберігає в одній таблиці - wp_posts.

Насправді аттачменти зберігаються як є - у вигляді файлів на диску, але WordPress використовує таблицю wp_posts для зберігання мета-інформації про аттачменті (наприклад ID користувача, який його завантажив, ID записи, яка посилається на аттачменті, час завантаження і т.п.) .

Сторінки, записи і аттачменти можуть бути дуже схожі один на одного, а можуть сильно відрізнятися. Спочатку ми розглянемо, що спільного між ними. Всі три види контенту мають унікальний ідентифікатор - ID (зазвичай створюється автоматично WordPress'ом або MySQL), автора (людина, яка написала запис або завантажив файл), дату, назву (заголовок), і опис (навіть якщо це поле пусте, його можна буде заповнити пізніше). Всі три види мають URL. Отже, для кожного запису, сторінки або аттачменти є запис в таблиці wp_posts.

Тепер поговоримо про відмінності між ними. Щоб відрізнити один тип контенту від іншого, в таблиці wp_posts існує поле post_type. Для записів його значення - 'post', для сторінок - 'page', для аттачменті - 'attachment'.

Сущещствует кілька спеціальних полів. Наприклад, поле post_mime_type використовується для зберігання типу файлу аттачменти ( 'image / jpeg' і 'application / pdf'). Поле menu_order містить порядковий номер відображення сторінки в списку. Поле post_parent використовується для організації сторінок із «підсторінками», а так само для зберігання інформації про зв'язок аттачменти із записом.

Для того, щоб зрозуміти, як і коли використовується те чи інше поле, запустіть наступні запити (для кожного типу контенту):

* SELECT * FROM wp_posts WHERE post_type = 'post' LIMIT 1 * SELECT * FROM wp_posts WHERE post_type = 'page' LIMIT 1 * SELECT * FROM wp_posts WHERE post_type = 'attachment' LIMIT 1

У цій же таблиці знаходиться інформація про стан записи / сторінки. У більшості випадків Ви побачите 'publish' для опублікованих записів, 'draft' для чернеток, і 'inherit' для аттачменті. З іншими станами Ви без проблем розберетеся самі.

Ось кілька прикладів того, як може бути використана таблиця wp_posts:

* Отримання статистики - скільки записів ви все написали, скільки записів написав той чи інший автор, скільки записів публікується в середньому за день і т.д.
* Створити список всіх аттачменті.
* Створити галерею картинок для кожного запису (hint: "WHERE post_type = 'attachment' AND (post_mime_type = 'image / jpeg' OR post_mime_type = 'image / gif' OR post_mime_type = 'image / png')").

wp_postmeta

Існує мільйон речей, які Ви, можливо, захочете проасоціювати зі своїм записом: Ваш настрій, назва пісні, яку Ви слухали, географічне розташування, список посилань на схожі записи, специфічну інформацію для пошукових машин, і т.д. і т.п. Все це зберігається в таблиці wp_postmeta.

Структура цієї таблиці дуже проста і гнучка. Вона має всього чотири поля: meta_id, post_id, meta_key і meta_value. meta_id створюється автоматично, і я не бачу жодної причини, по якій його потрібно було б міняти вручну. post_id відповідає ID записи (в таблиці wp_posts), про яку ця мета-інформація. meta_key - це короткий опис мета-інформації, яку Ви хочете додати до запису (наприклад 'mood' або 'song'). meta_value - це безпосередньо значення мета-інформації (наприклад «хуевастенько» для 'mood').

WordPress використовує цю таблицю для зберігання додаткової інформації про аттачменті, яка не може бути збережена в таблиці wp_posts (локальні шляху до файлу, інформація про прев'юшки і т.д.). Також в цій таблиці містяться специфічні поля або значення - ті, які ви бачите в редакторі. І, звичайно, існує величезна кількість плагінів, які використовують цю таблицю для своїх потреб. Отже, якщо Ви вирішили використовувати цю таблицю, Вам потрібно придумати унікальні імена для Ваших «мета-ключів», в іншому випадку Ваш плагін може конфліктувати з іншими.

wp_users

WordPress використовує цю таблицю для зберігання інформації про зареєстрованих користувачів. У ній містяться ID користувачів, їх логін, пароль зашифрованим, повне ім'я, дата реєстрації, і багато іншого.

wp_usermeta

Для користувачів таблиця wp_usermeta є тим же самим, чим є wp_postmeta для записів (контенту). У ній міститься вся додаткова інформація про користувачів - персональні настройки (вкл. / Викл. Візуальний редактор, день народження, контактна інформація і т.п.).

wp_comments

У таблиці wp_comments зберігаються всі коментарі до записів на вашому сайті, включаючи підтверджені, які очікують модерації, спам, трекбек, пінгбекі, послані Вам з інших сайтів. Про призначення полів цієї таблиці Ви можете здогадатися і самі, але в будь-якому випадку, ось їх короткий опис:

* Comment_ID - унікальний ID для кожного коментаря, створюється автоматично MySQL
* Comment_post_ID - унікальний ID записи, до якої коментар був доданий
* Comment_author - ім'я автора коментаря
* Comment_author_email - email автора коментаря
* Comment_author_url - URL автора коментаря
* Comment_author_IP - IP-адреса автора коментаря
* Comment_date - дата і час додавання коментарів
* Comment_content - текст коментаря
* Comment_approved - пройшов чи коментар модерацію і якщо так, то як
* Comment_agent - браузер автора коментаря (MSIE, Firefox, Safari і т.д.)
* Comment_type - звичайний коментаря, трекбек, пінгбек
* User_id - ID автора, якщо він зареєстрований користувач

Є ще кілька полів, але вони нам навряд чи знадобляться, тому ми залишимо їх опис за кадром.

wp_options

Таблиця wp_options містить всі глобальні настройки WordPress. Вона досить схожа на таблиці wp_postmeta і wp_usermeta за структурою, але є і відмінності.

У цій таблиці є поле blog_id, але використовується він лише в WordPress MU (велика частина коду одного користувача і розрахованої на багато користувачів інсталяцій WordPress збігаються). WordPress MU використовує це поле для того, щоб відрізнити настройки одного блогу від налаштувань іншого.

Поле autoload визначає - завантажуються / записуються чи настройки з бази даних / кеша або вони доступні тільки для читання. Більшість налаштувань завантажуються автоматично.

wp_categories

Таблиця wp_categories містить інформацію про всі категорії, які Ви створили, це: назва та опис категорії, ID батьківської категорії і т.д.

Для прискорення роботи WordPress зберігає деяку статистику. Наприклад, кількість записів і посилань в категорії перераховується кожного разу при їх додаванні або видаленні (поля category_counter і link_count).

wp_post2cat

Зв'язування записи з категорією здійснюється через таблицю wp_post2cat. Це стандартний підхід для зв'язку «багатьох-со-багатьма» в реляційних базах даних. wp_post2cat має тільки три поля: унікальний ID (для рядка в таблиці, створюється автоматично), унікальний ID записи і ID категорії, в яку додано запис.

wp_links

Зазвичай таблиця wp_links використовується для зберігання блогрол, списку посилань на інші сайти або блоги. Налаштувань для блогрол величезна кількість, тому докладно розглядати цю таблицю ми не будемо. Скажу тільки одне: якщо Вам раптом заманеться створити на основі WordPress каталог посилань, наприклад новий Yahoo !, Вам не доведеться багато програмувати. По суті потрібно тільки буде створити «кустомную» тему.

wp_link2cat

Таблиця wp_link2cat практично ідентична wp_post2cat, за винятком того, що в ній містяться ID посилань замість ID записів.

PS стаття старенька і підходить для бази WordPress до версії 2.3, але я вирішив її все таки опублікувати, тому що загальне все рано є. Може кому придатися 😉

джерело , переклад .

Новости