В первых четырёх статьях мы добавляли данные книги к обычной записи WordPress. Для одной демонстрации этого достаточно, но в настоящем каталоге смешивать книги и новости неудобно: у них разные поля, списки и правила оформления. Решение — создать отдельный тип записей «Книги», а затем показать группе ACF только редактору книг.
Когда нужен отдельный тип записей
Тип записи — это отдельный вид контента со своим списком в панели WordPress. Встроенные примеры — записи и страницы. Пользовательский тип, например book, добавляет раздел «Книги», но продолжает пользоваться знакомыми заголовками, редактором, статусами публикации и REST API.
Если книга отличается от статьи только парой необязательных полей, отдельный тип может быть лишним. Он полезен, когда каталог будет расти и книгам понадобятся собственный архив, адреса страниц, фильтры или редакционные правила.
Регистрируем тип записей
Для небольшого сайта положите код в собственный плагин проекта. Тогда тип «Книги» останется доступен, даже если поменять тему. Создайте PHP-файл плагина и зарегистрируйте тип на событии init:
<?php
add_action( 'init', 'codelab_register_book_post_type' );
function codelab_register_book_post_type() {
register_post_type( 'book', array(
'labels' => array(
'name' => 'Книги',
'singular_name' => 'Книга',
'add_new_item' => 'Добавить книгу',
'edit_item' => 'Редактировать книгу',
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'books' ),
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
) );
}
book — внутренний ключ типа, а books — часть публичного адреса. supports включает стандартные элементы редактора. show_in_rest нужен, чтобы тип был доступен редактору блоков и REST API WordPress.
После активации плагина один раз откройте Настройки → Постоянные ссылки и нажмите «Сохранить». WordPress обновит правила адресов. Не вызывайте flush_rewrite_rules() на каждой загрузке страницы: это дорогая операция, которую выполняют при активации плагина или при разовой настройке.
Показываем группе ACF нужный экран
Откройте группу полей «Данные книги» и поменяйте правило показа с «Тип записи равно Запись» на «Тип записи равно Книга». Если группа зарегистрирована кодом, измените поле value в разделе location на book:
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'book',
),
),
),
Создайте книгу в новом разделе. На её экране должны быть обычное поле содержимого и ваши поля ACF, а в обычной записи — только стандартные поля. Одно правило размещает одну группу полей на подходящем типе контента.
Если пункт «Книги» не появился
- Проверьте, что плагин активирован и код не содержит синтаксической ошибки.
- Убедитесь, что ключ типа состоит из допустимых символов и короче 20 знаков.
- Обновите постоянные ссылки после добавления нового типа.
- Проверьте
show_in_rest, если используете редактор блоков. - Сверьте
location.valueв группе ACF с ключом типаbook.
Теперь каталог книг отделён от новостей и готов к росту. В следующей части добавим в книгу повторяющийся список глав, чтобы редактор мог нажать «Добавить строку», а шаблон — вывести столько элементов, сколько заполнено.
Документация
- register_post_type() в документации WordPress.
- Правила постоянных ссылок и flush_rewrite_rules().
- Группы полей и правила показа ACF.
0
12