Типи публікацій WordPress: абстракція для сутностей
Коли програмісти говорять про сутності, вони зазвичай говорять про концепцію або щось, що існує в системі. Іноді це клас, іноді бібліотека чи залежність, або це може бути щось на зразок типів публікацій WordPress.
Якщо WordPress слід розглядати як основу програми (а не фреймворк), важливо думати про певні функції так, щоб їх можна було розглядати як сутності. У наведеному вище прикладі тип публікації є саме таким.
Коли були введені користувацькі типи публікацій, це дало нам можливість ввести в програму щось інше, ніж сторінки та публікації. Тепер ми можемо реалізувати будь-яку концепцію, наприклад подію, і розглядати її як власну сутність у системі.
Але коли все сказано та зроблено, все збережено в таблиці дописів. І це добре, тому що розробка програмного забезпечення — це абстракція. Коли ми впроваджуємо типи публікацій WordPress, ми реалізуємо абстракцію на основі ідеї публікацій.
Типи публікацій WordPress
У минулому дописі я пройшов через процес створення користувача, який остаточно буде пов’язаний з деякою сутністю в додатку WordPress.
- Можливо, він/вона є автором публікації,
- Можливо, він/вона продавець товару,
- Можливо, він/вона є оповідачем історії,
- Або все, що ви можете собі уявити.
Можливості безмежні. Але перш ніж ми поговоримо про те, як створити зв’язок між двома сутностями – тобто користувачем і типом публікації WordPress – нам потрібно поговорити про те, як реалізувати сутність або спеціальний тип публікації програмним шляхом.
Про це є багато документації та доступних навчальних посібників, тому я не збираюся зволікати. Натомість я намагатимусь зберегти це якомога простіше. Пам’ятайте, що мета всієї цієї серії полягає в тому, щоб зрештою дійти до моменту, коли ми будемо асоціювати сутності через метадані.
Але перед тим, як це зробити, нам потрібно створити сутності. Отже, у нас є користувач, тож давайте зробимо це.
Для нашого прикладу припустімо, що користувач, якого ми створили в попередній публікації, Меган, є автором книги. А в інсталяції WordPress, якою керує хтось інший, існує спеціальний тип публікації для книг, кожна з яких має кілька атрибутів:
- назва,
- опис,
- дата публікації,
- ISBN,
- кількість проданих початкових примірників,
- де можна придбати,
- і так далі.
Ви можете додати більше або менше до своєї реалізації. Насправді, можливо, ви займаєтеся продажем електронних книг, і URL-адреса книги для покупки є одним із атрибутів. У будь-якому випадку ви зрозуміли ідею.
З огляду на це, ми можемо реалізувати простий настроюваний тип публікації для «книг» програмним шляхом.
Реалізація типу публікації
А виглядає це так :
<?php
add_action( 'init', 'acme_create_book_post_type' );
/**
* Creates a new custom post type called 'Book' using the smallest number of arguments
* to prepare the post type.
*/
function acme_create_book_post_type() {
$args = array(
'labels' => array(
'name' => 'Books',
'singular_name' => 'Book',
),
'public' => true,
);
register_post_type( 'acme_book', $args );
}
Якщо ви прочитали документацію щодо створення користувацьких типів публікацій, то в цьому немає нічого незвичайного. Це має виглядати саме так, як ви очікували.
Те, де ви створюєте, залежить від характеру вашого проекту. Є багато людей, які будуть аргументувати те, що це в плагіні або запечене в тему. Це не місце, щоб обговорювати це. Достатньо сказати, що для моїх цілей я припускаю, що все це є частиною того самого плагіна з попереднього підручника.
Крім того, я не відступаю від спеціальної таксономії, коментарів або будь-якого іншого спеціального типу даних, які можна пов’язати з користувацьким типом публікації.
Потім ми дивимося, як це виглядає в області адміністрування WordPress, а також як це виглядає в базі даних.
Зазирни за завісу
По-перше, ось як це виглядає (або має виглядати) в області адміністрування WordPress:
І якщо ви подивіться на базу даних після створення запису, ви побачите щось на зразок цього:
Очевидно, я обмежив записи, що повертаються у інтерфейсі бази даних, відфільтрувавши результати, щоб полегшити перегляд знімка екрана.
Про книги
І це все, насправді. Я маю на увазі, що на найфундаментальнішому рівні це те, як ви створюєте власний тип публікації в WordPress. Я знаю, що в цьому немає нічого нового, але якби я міг навести трохи вагоміші аргументи на користь такого допису, він включав би наступні два пункти.
1 Йдеться про абстракції
Якщо ви хочете почати створювати веб-додатки за допомогою WordPress, важливо перестати думати про речі в традиційних термінах, таких як публікації, сторінки, коментарі та категорії, і почати думати про них як про більш загальні абстракції.
Сутності, як згадувалося раніше в статті. Як тільки ви це зробите, у вас зміниться ментальна модель, яка керує вашою здатністю продумати та реалізувати рішення.
2 Це про стосунки
Хоча ми часто думаємо про речі в їхніх окремих частинах, таких як публікації та сторінки, ми невід’ємно знаємо, що публікації можуть мати коментарі, коментарі можуть мати відповіді, сторінки можуть мати шаблони тощо.
Існують відносини між усіма цими окремими речами, які є частиною системи. І коли ви починаєте думати про стосунки як про те, що дозволяє нам робити більше, ви починаєте бачити, наскільки потужним може бути щось. Це ціле «ціле більше, ніж сума його частин».
Отже, коли у вас є окремі сутності, і коли ви починаєте бачити, як вони можуть пов’язуватися одна з одною, ви робите крок вперед у створенні чогось, що вирішує дещо складнішу проблему із, здавалося б, простих частин.
І саме туди ми прямуємо далі.
Що щодо метаданих?
Основна мета цієї серії — зрозуміти, як створити зв’язок між об’єктами, чи не так? Зокрема, ми прагнемо створити зв’язок між користувачем і публікацією або, точніше, автором і книгою.
WordPress забезпечує основу для цього, і саме тут можуть стати в нагоді додаткові таблиці та хуки. У наступній публікації я розповім про те, як створити цей зв’язок, напрямки, в яких зв’язки можуть рухатися, і як працювати з цими даними, якщо, скажімо, користувача буде видалено з програми.
Повідомлення серії
- Асоціація метаданих WordPress: як це зробити
- Програмне створення користувачів WordPress
- Типи публікацій WordPress: абстракція для сутностей
- Асоціація метаданих WordPress: пов’язані сутності

