Записи (пости) у WordPress

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

Перше, що потрібно зробити — це розділити поняття «Запис» на вузьке та широке. Забігаючи наперед скажу, що в поточній структурі WordPress (де WP – це скоріше конструктор, а не блоговий движок), називати пости записами – це не зовсім правильно… Я розумію, що в російському слово “пост” – це англицизм, але коли пости називають записами, і нові типи записів теж називають записами – це безперечно ускладнює розуміння. Наприклад, фразу “потрібно створити запис”, можна зрозуміти як “створити публікацію” або “створити новий тип-записи в структурі WordPress”. У такій ситуації, коли молодий розробник ще погано розуміє як і що працює, він неодмінно заплутається. Тому, давайте, пости (записи типу post) називатимемо постами, а «запис» нехай буде збірною назвою для всіх видів типів записів – рядок (запис) у таблиціwp_posts .

Дивіться також:


Запис у вузькому значенні

Це публікація запису з типом post , який існує у WordPress відразу після встановлення. Він прикріплюється до рубрик або міток. Таким “записам” можна протиставити “сторінки” (публікація запису з типом page ).

Записи у WordPress


Запис у широкому значенні

Це будь-які елементи які містять дані сайту (контент). Всі ці дані записується в базу даних, таблицю wp_posts.

Структура таблиці WordPress wp_posts

Так як всі елементи знаходиться в одній таблиці – вони мають однакові дані, а значить, технічно записи не сильно один від одного відрізняються. Я виділив би 3 основні відмінності:

  1. Деревоподібна структура . Один запис може бути дочірнім або батьківським до іншого. Така структура має постійні сторінки.

  2. Назва типу запису . Кожен тип запису має свою назву: пости називаються post, сторінки page, довільно створені типи називаються так як їх назвали, наприклад portfolio

    Я виділив цю різницю, тому що поле post_typeв таблиці wp_postsіндексне. Тому образно можна сказати, що тип поділяє таблицю деякі таблиці на кшталт записів, тобто. під час запиту щодо вибірки записів, WordPress дуже швидко «урізає» таблицю до вказаного типу записів і працює лише з цим типом.

  3. Вбудовані типи записів . До них відносяться всі нестандартні типи записів: ревізії (редакції), елементи меню (довільне меню), вкладення (медіафайли). Тобто. це записи, які використовуються і обробляються в WordPress по особливому.


Дефолтні Типи записів (post_type)

Наступні типи записів реєструються у WordPress за промовчанням.

Назва типуНазваОпис
postЗаписи (Пости)Записи WP.
pageСторінкиПостійні Сторінки WP.
любое_имяДовільні типиЗаписи, створені за допомогою register_post_type() .
attachmentВкладенняМедіафайли WP : картинки, аудіо, відео.
nav_menu_itemЕлементи менюВбудований тип WP для меню.
revisionРевізіїВбудований тип WP для копій редагування статті (редакцій запису).
oembed_cacheoEmbed ResponsesВідповіді за запити oEmbed .
custom_cssCustom CSSCSS стилі вказані в кастомайзері. wp_get_custom_css_post ()
customize_changesetChangesetsНалаштування кастомайзера.
user_requestUser RequestsЗапити зміни персональних даних ()
wp_blockReusable BlocksБлоки гутенберга.
wp_templateШаблониШаблони для підключення до теми. (Редактор блоків)
wp_template_partЧастини шаблонуЧастини шаблон для підключення до теми. (Редактор блоків)
wp_global_stylesГлобальні стиліГлобальні стилі для підключення до теми. (Редактор блоків)
wp_navigationМеню навігаціїНавігаційне меню, яке можна вставити в сайт.

Дефолтні записи реєструються функцією create_initial_post_types() .


Дефолтні Статуси записів (post_status)

Наступні статуси записів використовуються WordPress з коробки.

СтатусОпис
publishОпублікований пост (сторінка чи тип запису).
pendingЗапис на розгляд перед публікацією.
draftЧернетка запису.
auto-draftТільки створений пост, без заголовка, контенту та іншої інформації.
futureЗапис запланований до публікації у майбутньому.
privateЗапис не доступний не авторизованим користувачам.
inheritРевізія чи вкладення (revision or attachment). Дивіться get_children() .
trashЗапис, що знаходиться в кошику.

Функції, пов’язані зі статусом запису (повний список дивіться тут ):

ФункціяОпис
get_post_status_object()Отримує об’єкт даних вказаного статусу запису (поста).
is_post_status_viewable()Визначення, десь після post status is consideraed “viewable”.
get_post_statuses()Повертає масив наступних базових статусів посту: Draft, Pending, Private, Publish.


Кожне поле таблиці wp_posts:

ПолеЗначенняіндекс
IDID записуОсновний
post_authorID автора записуpost_author
post_dateДата створення запису (в діапазоні часу сайту)type_status_date
post_date_gmtДата створення запису (в діапазоні GMT/UTC)
post_contentКонтент запису (текст посту, сторінки)
post_titleЗаголовок запису
post_excerptКороткий текст запису (уривок, витримка, цитата)
post_statusСтатус запису (publish, inherit, trash)type_status_date
comment_statusЧи дозволено коментування (open, closed)
ping_statusЧи дозволені пінги (open, closed)
post_passwordПароль для доступу до запису
post_nameЯрлик запису. Назва, яка використовується в URLpost_name
to_pingURL на які потрібно відправити пінг під час публікації
pingedURL куди пінг було відправлено
post_modifiedДата зміни запису (в діапазоні сайту)
post_modified_gmtДата зміни запису (в діапазоні GMT/UTC)
post_content_filteredТимчасовий вміст запису. Докладніше
post_parentID батьківського записуpost_parent
guidУнікальний ідентифікатор запису. Для фідів.
menu_orderЧисловий порядок у меню
post_typeТип запису: post,pagetype_status_date
post_mime_typeMIME тип запису. Для вкладень: image/jpeg,video/mp4
comment_countКількість коментарів запису.

Як видно, є спільні поля всім типів записів, наприклад: post_type, post_title. Тоді як деякі поля використовуються для одних типів, інші для інших. Наприклад, поле post_mime_typeвикористовується тільки для вкладень, поле post_parentвикористовується для деревоподібних типів записів, поля to_pingі pingedвикористовуються для записів з контентом, наприклад: пости, сторінки, довільні типи.

Велике значення у цій таблиці відіграють індексні поля: post_name, post_parent, post_author, post_type + post_status + post_date(складовий індекс). Індекси потрібні, щоб прискорити запити щодо вибірки записів. Не буду вдаватися до подробиць індексів, про них ви краще почитайте у чудовій статті: Індекси в MySQL .

На цьому з поняттям «записи в WordPress» думаю можна закінчити та перейти до інших важливих знань, пов’язаних із записами.

Різниця між post_content_filteredтаpost_content

post_content_filtered– місце, де зберігається тимчасовий вміст. WordPress взагалі не використовує це поле, призначене для плагінів. Воно встановлюється порожнім щоразу під час оновлення посту, крім випадків, коли воно зазначено. Тобто, якщо це поле вказано при оновленні запису, воно буде записано в БД, але якщо воно не буде вказано при черговому оновленні, то воно буде стерте.

Детальна відповідь на цю тему тут: http://wordpress.stackexchange.com/questions/113387/when-is-the-post-content-filtered-column-in-database-cleared-by-wordpress


Мета-дані: Додаткові дані записів

Завдання при розробці можуть бути різними і наявних полів у таблиці wp_postsзавжди нахоплює. Тож розширення можливостей, будь-яка запис у WordPress, тобто. будь-який рядок у таблиці wp_postsможе мати додаткові дані і вони можуть бути будь-якими – довільними. Такі дані називаються: метадані, їх ще називають мета-поля, довільні поля, кастомні поля та бог знає як ще.

Всі метадані записів зберігаються в таблиці wp_postmeta:

postmeta-table

ПолеЗначенняІндекс
meta_idID метаполя. Зазвичай ніде не використовується…Основний
post_idID запису з таблиці wp_posts.post_id
meta_keyКлюч метаполя.meta_key
meta_valueЗначення метаполя. Завжди рядок, масиви зберігаються у серіалізованому вигляді

Для записів типу post, page метаполями можна керувати на сторінці редагування запису:

custom-fields

Як включити метабокс довільних полів у блочному редакторі Gutenberg?


Нотатки по мета-полям (довільним полям)

  • Ревізії метаданих не мають.

  • Мета-поле, ім’я якого починається з нижнього підкреслення ( _) сприймається двигуном як приховане і за замовчуванням в адмінці не відображається.

    Приміром у ВП для записів є такі службові метаполя:

    • _wp_page_template— зберігається назва php шаблону, якщо для сторінки був вказаний файл шаблону.
    • _edit_lock— записується позначка часу та ID користувача, який редагує запис.
    • _edit_last– ID користувача, який останнім правил запис.
    • _thumbnail_id– ID мініатюри запису (вкладення).
  • Для управління метаполями у мене є клас Kama_Post_Meta_Box . Також є потужніші плагіни:

  • Докладніше про метадані WordPress


Функції метаполів посту

Для керування метаполями в коді теми або плагіна існують спеціальні функції:

get_post_meta()Набуває значення довільного поля запису (поста). Дозволяє також отримати всі метаполі.
add_post_meta()Додає довільне поле для зазначеного запису (поста).
update_post_meta()Оновлює вказане довільне поле (метаполі) вказаного запису (поста) або додає нове.
delete_post_meta()Видалять усі довільні поля (метаполя) із зазначеним ключем у зазначеного запису (поста).
get_post_custom()Отримує багатовимірний масив із даними всіх довільних полів поточного посту.
get_post_custom_keys()Отримує масив із ключами довільних полів, що належать поточному запису.
get_post_custom_values()Отримує масив значень довільних полів із зазначеною назвою у зазначеного запису (поста).
the_meta()Виводить довільні поля запису (метадані з wp_postmeta ). Поля відображаються у списку <li> . Приховані поля ігноруються.


Зв’язки записів (батьки та таксономії)

Оскільки будь-який контент для зручного читання має бути структурований, записи можна пов’язувати між собою:

  • Деревоподібні записи зв’язуються один з одним як батьківські та дочірні. І вони не мають зв’язку з рубриками (таксономіями). Деревоподібний зв’язок записується в полі post_parentтаблиці wp_posts.

  • Не деревоподібні (лінійні) записи зв’язуються один з одним через рубрики, мітки та довільні таксономії. У цьому полі post_parentвони завжди дорівнює 0 і використовується.

Докладне пояснення, що таке таксономії у WordPress .

Схематично це виглядає якось так:

Як записи WordPress зв'язуються між собою

Зв’язки у нестандартних типах записів:

  • Елементи меню використовують логіку деревоподібних записів для зв’язку між собою.
  • Ревізії та Вкладення – прикріплюються до батьківського запису через поле post_parentтаблиці wp_posts.


нотатки


Очищення контенту запису (посту)

Контент та уривок запису перед збереженням у бд очищається функцією (field_no_prefix)_save_pre :

add_filter( 'content_save_pre', 'wp_filter_post_kses');
add_filter( 'excerpt_save_pre', 'wp_filter_post_kses');

Ці хуки спрацьовують із sanitize_post_field() .

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *