
💡 Як створити користувацький тип запису в WordPress: код і плагін
Стандартні «Записи» та «Сторінки» закривають більшість задач звичайного сайту. Але коли з’являється каталог товарів, база нерухомості чи портфоліо проєктів, цих двох типів контенту вже бракує. Змішувати товари з чернетками блогу незручно, а перевантажувати сторінки довільними полями, шлях до хаосу в адмінці.
WordPress вирішує цю задачу через користувацькі типи записів, Custom Post Types (CPT). Ви створюєте окремий розділ у бічному меню, зі своїми полями, рубриками та шаблонами виведення. Товари живуть окремо від статей. Події не плутаються зі сторінками. Дані залишаються там, де їм місце.
Нижче, два перевірені способи: через код на register_post_type() (гнучко, нуль зайвих плагінів) і через безплатний плагін CPT UI (жодного рядка PHP). Обидва працюють на WordPress 6.7+ і перевірені на бойових сайтах.
💡 Швидкий огляд:
- Реєструєте новий тип запису через функцію ядра
register_post_type(), без плагінів, повний контроль над параметрами. - Альтернатива без коду: плагін Custom Post Type UI дає візуальний інтерфейс, знижує поріг входу й унеможливлює синтаксичні помилки.
- Після реєстрації тип з’являється в бічному меню. Фінальний штрих, таксономії, поля та скидання пермалінків.
Що таке користувацький тип запису
Будь-який контент у WordPress — це запис із полем post_type у таблиці wp_posts. У дописів блогу, post. У сторінок, page. У вкладень, attachment. Користувацький тип додає ще одне значення: product для товарів, event для подій, portfolio для проєктів. Будь-яке, під задачу сайту.
Кожен CPT отримує власний пункт в адмінці, структуру URL (/events/webinar-2026/), свої таксономії та підтримку потрібних блоків редактора: мініатюри, витяги, редактор, коментарі. Усе це вмикається галочками в масиві supports, жодної магії.
Головний виграш, порядок. Товари не бовтаються в стрічці блогу. Події не потрібно виокремлювати фільтром із загальної купи. Адміністрування пришвидшується, пошук сайтом працює точніше.
Спосіб 1: реєстрація через код, register_post_type()
Базовий метод, який працює з WordPress 3.0. Жодних сторонніх плагінів. Код розміщується у functions.php дочірньої теми або, безпечніше, через плагін Code Snippets: помилка в коді не покладе сайт, а просто вимкне конкретний сніпет.
Крок 1: функція на хуку init
Функція вішається на хук init. Раніше не можна, ядро ще не готове приймати реєстрації. Пізніше, тип не підхопиться до наступного запиту. Ось мінімальний робочий каркас:
1 /** 2 * Регистрирует пользовательский тип записи «Книги». 3 * Разместите в functions.php дочерней темы или через Code Snippets. 4 */ 5 function myprefix_register_book_post_type() { 6 register_post_type( 'book', array( 7 'labels' => array( 8 'name' => 'Книги', 9 'singular_name' => 'Книга', 10 'add_new_item' => 'Добавить книгу', 11 'edit_item' => 'Редактировать книгу', 12 'view_item' => 'Смотреть книгу', 13 'search_items' => 'Искать книги', 14 'not_found' => 'Книг не найдено', 15 ), 16 'public' => true, 17 'has_archive' => true, 18 'rewrite' => array( 'slug' => 'books' ), 19 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), 20 'show_in_rest' => true, 21 'menu_icon' => 'dashicons-book-alt', 22 ) ); 23 } 24 add_action( 'init', 'myprefix_register_book_post_type' );
Після вставлення коду в адмінці з’являється розділ «Книги». URL записів, site.ru/books/название-книги/. Працює одразу.
Крок 2: ключові параметри
Функція приймає два аргументи: рядок-ключ типу (до 20 символів, латиниця та дефіси) і масив налаштувань. Ось параметри, які варто свідомо налаштувати:
Параметр | Що робить | Рекомендація |
|---|---|---|
| Видимість в адмінці та на фронті |
|
| Сторінка-архів усіх записів типу |
|
| Структура URL (slug) | Задайте явно, без спецсимволів |
| Блоки редактора | Мінімум: |
| Доступність у блочному редакторі |
|
| Іконка в бічному меню | Виберіть із Dashicons |
Крок 3: таксономії
Категорії та мітки дописів за замовчуванням не прив’язані до вашого CPT. Створіть власні:
1 function myprefix_register_book_taxonomies() { 2 register_taxonomy( 'genre', 'book', array( 3 'label' => 'Жанры', 4 'rewrite' => array( 'slug' => 'genre' ), 5 'hierarchical' => true, 6 'show_in_rest' => true, 7 ) ); 8 9 register_taxonomy( 'book_tag', 'book', array( 10 'label' => 'Метки книг', 11 'rewrite' => array( 'slug' => 'book-tag' ), 12 'hierarchical' => false, 13 'show_in_rest' => true, 14 ) ); 15 } 16 add_action( 'init', 'myprefix_register_book_taxonomies' );
Таксономії реєструються через register_taxonomy() із явною прив’язкою до post_type другим параметром. hierarchical => true дає деревоподібну структуру, як у категорій. false, плаский список, як у міток.
Крок 4: скидання пермалінків
Після реєстрації зайдіть у Налаштування → Постійні посилання та натисніть «Зберегти зміни», навіть якщо нічого не змінювали. WordPress перезбере правила маршрутизації. Без цього кроку URL на кшталт /books/ видаватимуть 404.
Коли коду достатньо
Метод добрий для одного-двох кастомних типів, коли структура не змінюється часто. Плюс: нуль зайвих плагінів і повний контроль над кожним параметром. Мінус: для складних зв’язків між кількома CPT і фронтових форм надсилання код швидко розростається.
Спосіб 2: без коду, плагін Custom Post Type UI
Якщо заходити у functions.php не хочеться, ставте Custom Post Type UI. Безплатний плагін від WebDevStudios: мільйон активних установок, рейтинг 4,6 на WordPress.org. Оновлений у травні 2026, протестований аж до WP 7.0.

Як створити CPT через інтерфейс
- Установіть плагін: Плагіни → Додати новий → «Custom Post Type UI» → Установити → Активувати.
- Перейдіть у CPT UI → Add/Edit Post Types.
- Заповніть поля: Post Type Slug (латиниця, наприклад
event), Plural Label («Події»), Singular Label («Подія»). - У блоці Settings позначте: Public (True), Has Archive (True), Show in REST API (True).
- У блоці Supports позначте мінімум: Title, Editor, Thumbnail, Excerpt.
- Натисніть Add Post Type.
Таксономії створюються там само, на вкладці Add/Edit Taxonomies. Укажіть прив’язку до вашого типу запису, рубрики з’являться в бічному меню.
Сильні сторони
Швидка реєстрація без ризику синтаксичної помилки: плагін сам збирає коректний масив $args. Вкладка Tools дає міграцію типів між сайтами через експорт та імпорт коду. CPT UI Pro додає блоки для фронтового виведення та drag-and-drop колонок в адмінці, але безплатна версія повністю закриває задачу реєстрації.
Зверніть увагу: плагін лише реєструє типи та таксономії. Для виведення на фронті знадобляться або шаблони в темі, або CPT UI Pro, або зв’язка з Advanced Custom Fields чи Elementor.
Порівняння: код проти плагіна
Критерій | Код ( | Плагін (CPT UI) |
|---|---|---|
Поріг входу | Потрібне розуміння PHP-масиву | Інтерфейс як у стандартних налаштувань WP |
Кількість CPT | Не обмежено | Не обмежено |
Перенесення між сайтами | Копіювання коду | Експорт/імпорт через Tools |
Зайвий код на сайті | Немає | Плюс один плагін |
Залежність від плагіна | Немає | Є, CPT UI має бути активним |
Документація |
На практиці часто комбінують: реєструють типи через CPT UI для швидкості, а поля додають через Advanced Custom Fields. Виходить візуальний інтерфейс налаштування без жодного рядка PHP.
⁉️🤔 Часті запитання
Чи потрібно скидати пермалінки після створення CPT?
Так, обов’язково. Зайдіть у Налаштування → Постійні посилання та натисніть «Зберегти». WordPress перезбере правила маршрутизації. Без цього нові URL на кшталт
/books/повертатимуть 404.
Чим CPT UI відрізняється від ACF у реєстрації типів?
CPT UI лише реєструє тип запису та таксономії. ACF, починаючи з версії 6.1, теж уміє реєструвати CPT, але його головна сила, користувацькі поля. Зв’язка CPT UI + ACF дає інтерфейс для типів і гнучкі поля. Ви не прив’язані до одного вендора.
Чи можна перейменувати наявний тип запису?
Прямого механізму немає. При зміні
post_typeу базі старі записи зникають з адмінки. Правильний шлях: створити новий тип із потрібним іменем, перенести записи SQL-запитомUPDATE wp_posts SET post_type = 'new_type' WHERE post_type = 'old_type', і лише потім видалити стару реєстрацію. Повний бекап бази перед міграцією обов’язковий.
Чи зникнуть кастомні типи при зміні теми?
Якщо типи зареєстровані у
functions.phpтеми, так, при зміні теми вони зникнуть з адмінки. Записи залишаться в базі, але не будуть видні. Реєструйте CPT в окремому плагіні або через Code Snippets, тоді типи переживуть будь-яку зміну теми.
Як вивести CPT на головну в загальну стрічку?
Додайте фільтр у Code Snippets:
add_filter( 'pre_get_posts', function( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } );. Підставте свійpost_typeу масив, записи з’являться в стрічці поруч зі звичайними дописами.
Який спосіб обрати: підсумковий розклад
Обидва методи ведуть до одного результату: в бічному меню з’являється новий розділ, готовий до наповнення. Різниця лише в інструменті.
Працюєте з сайтом руками й не боїтеся functions.php, беріть код. Одна функція register_post_type(), нуль зайвих плагінів. Підходить для лендингів, невеликих каталогів і проєктів із техпідтримкою розробника.
Передаєте сайт клієнту або збираєте контент-проєкт на десятку типів, ставте CPT UI. Візуальний інтерфейс знижує поріг входу, а експорт конфігурації економить години при переїзді між майданчиками.
У будь-якому разі після реєстрації налаштуйте виведення: шаблони single і archive у темі або візуальне верстання через CPT UI Pro / Elementor Pro. Без цього кроку контент залишиться тільки в адмінці.



