Произвольный тип записи

Оригинальное название: custom post type

Коротко

Собственный тип содержимого, который разработчик регистрирует в дополнение к записям и страницам: услуги, проекты портфолио, вакансии, мероприятия, товары.

Что такое «Произвольный тип записи»

Встроенных типов два основных — записи для блога и страницы для постоянных разделов. Когда на сайте появляется каталог однотипных объектов со своими полями, отдельным разделом в админке и своим архивом, его оформляют произвольным типом. Так у вакансий будет пункт меню «Вакансии», свой адрес /vacancies/, отдельный шаблон и поля «зарплата» и «график», а в общий блог они не попадут.

Технически все типы хранятся в одной таблице wp_posts и различаются колонкой post_type. Поэтому новый тип сразу получает статусы, корзину и поиск, а ревизии, отрывок и миниатюру включают списком в параметре supports. О встроенных типах подробнее на странице тип записи.

Пример регистрации

add_action( 'init', function () {
    register_post_type( 'vacancy', [
        'labels'       => [ 'name' => 'Вакансии', 'singular_name' => 'Вакансия' ],
        'public'       => true,
        'has_archive'  => true,
        'rewrite'      => [ 'slug' => 'vacancies' ],
        'menu_icon'    => 'dashicons-businessman',
        'supports'     => [ 'title', 'editor', 'thumbnail', 'excerpt' ],
        'show_in_rest' => true,
    ] );
} );

Параметр show_in_rest нужен для редактора блоков: без него тип откроется в классическом редакторе. После регистрации один раз пересохраняют постоянные ссылки, иначе новые адреса будут отдавать 404.

Шаблоны вывода

По иерархии шаблонов WordPress сначала ищет файлы single-vacancy.php для отдельной вакансии и archive-vacancy.php для списка, а если их нет — берёт общие single.php и archive.php. В блочной теме те же шаблоны создают в редакторе сайта.

Ошибки при создании

  • Тип объявлен в functions.php темы. При смене темы раздел исчезнет из админки, хотя записи останутся в базе. Регистрировать тип надёжнее в плагине.
  • Неподходящее имя. Оно должно быть не длиннее 20 символов и состоять из строчных латинских букв, цифр, дефисов и подчёркиваний — более длинное WordPress не зарегистрирует. Зарезервированные имена вроде post, page, action, order, theme конфликтуют с ядром, их не используют.
  • Имя типа поменяли после наполнения. Записи не переезжают автоматически: их post_type в базе остаётся старым, и раздел выглядит пустым.

Типы записей, поля и шаблоны дешевле продумать до наполнения, чем переделывать готовый раздел: это одна из первых задач при разработке сайта на WordPress.

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение