Skip to content

Все для WordPress, веб-розробки — і не тільки

💡 Як створити користувацький тип запису в WordPress: код і плагін

💡 Як створити користувацький тип запису в 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 */
5function 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}
24add_action( 'init', 'myprefix_register_book_post_type' );

Після вставлення коду в адмінці з’являється розділ «Книги». URL записів, site.ru/books/название-книги/. Працює одразу.

Крок 2: ключові параметри

Функція приймає два аргументи: рядок-ключ типу (до 20 символів, латиниця та дефіси) і масив налаштувань. Ось параметри, які варто свідомо налаштувати:

Параметр

Що робить

Рекомендація

public

Видимість в адмінці та на фронті

true для більшості випадків

has_archive

Сторінка-архів усіх записів типу

true для каталогів і добірок

rewrite

Структура URL (slug)

Задайте явно, без спецсимволів

supports

Блоки редактора

Мінімум: title editor thumbnail

show_in_rest

Доступність у блочному редакторі

true обов’язково, інакше Gutenberg не відкриється

menu_icon

Іконка в бічному меню

Виберіть із Dashicons

Крок 3: таксономії

Категорії та мітки дописів за замовчуванням не прив’язані до вашого CPT. Створіть власні:

1function 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}
16add_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 UI

Як створити 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.

Порівняння: код проти плагіна

Критерій

Код (register_post_type)

Плагін (CPT UI)

Поріг входу

Потрібне розуміння PHP-масиву

Інтерфейс як у стандартних налаштувань WP

Кількість CPT

Не обмежено

Не обмежено

Перенесення між сайтами

Копіювання коду

Експорт/імпорт через Tools

Зайвий код на сайті

Немає

Плюс один плагін

Залежність від плагіна

Немає

Є, CPT UI має бути активним

Документація

developer.wordpress.org

docs.pluginize.com

На практиці часто комбінують: реєструють типи через 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. Без цього кроку контент залишиться тільки в адмінці.