wpcat.ru wordpress WPCat.ru

Как создать уникальный тип записи (Custom Post Type) в WordPress

WordPress изначально работает с двумя основными типами записей — записями (posts) и страницами (pages). Но для более гибкой организации контента часто требуется создавать уникальные типы записей, которые называются Custom Post Types (CPT). В этой статье мы подробно разберём, как именно создавать и настраивать такие типы записей, чтобы ваш сайт соответствовал любым требованиям.

Что такое Custom Post Type и зачем он нужен

Custom Post Type — это пользовательский тип записи, который позволяет создавать отдельные сущности контента, отличные от стандартных записей и страниц. Например, если у вас сайт с каталогом книг, вы можете создать тип записи «Книги», чтобы отделить их от обычных записей блога.

Использование CPT помогает:

  • Структурировать контент по категориям, отражающим особенности проекта.
  • Улучшить юзабилити как для администраторов сайта, так и для пользователей.
  • Расширить функционал без сложных костылей и хака стандартных типов записей.

Разберём, как это реализовать на практике.

Регистрация Custom Post Type — базовый пример

Для создания CPT нужно использовать функцию wpcat_register_custom_post_type(), которую мы зарегистрируем в файле functions.php вашей темы или в отдельном плагине. Ниже пример кода для создания типа записи «Книги» (books):

function wpcat_register_custom_post_type() {
    $labels = array(
        'name'               => 'Книги',
        'singular_name'      => 'Книга',
        'add_new'            => 'Добавить книгу',
        'add_new_item'       => 'Добавить новую книгу',
        'edit_item'          => 'Редактировать книгу',
        'new_item'           => 'Новая книга',
        'all_items'          => 'Все книги',
        'view_item'          => 'Просмотреть книгу',
        'search_items'       => 'Искать книги',
        'not_found'          => 'Книги не найдены',
        'not_found_in_trash' => 'В корзине книги не найдены',
        'menu_name'          => 'Книги'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'books'),
        'show_in_rest'       => true, // поддержка Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-book',
    );

    register_post_type('books', $args);
}
add_action('init', 'wpcat_register_custom_post_type');

Этот код создаёт новый тип записи «Книги» с поддержкой заголовка, редактора, миниатюры и метаполей. В админке появится отдельный пункт меню с иконкой книги.

Настройка таксономий для Custom Post Type

Для удобной категоризации записей CPT желательно создавать свои таксономии — аналоги категорий и тегов. Например, для книг можно добавить таксономию «Жанры».

Пример создания таксономии «Жанры» для CPT «Книги»:

function wpcat_register_taxonomy() {
    $labels = array(
        'name'              => 'Жанры',
        'singular_name'     => 'Жанр',
        'search_items'      => 'Искать жанры',
        'all_items'         => 'Все жанры',
        'parent_item'       => 'Родительский жанр',
        'parent_item_colon' => 'Родительский жанр:',
        'edit_item'         => 'Редактировать жанр',
        'update_item'       => 'Обновить жанр',
        'add_new_item'      => 'Добавить новый жанр',
        'new_item_name'     => 'Название нового жанра',
        'menu_name'         => 'Жанры',
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'genre'),
    );

    register_taxonomy('genre', array('books'), $args);
}
add_action('init', 'wpcat_register_taxonomy');

Теперь у каждого объекта «Книга» можно выбрать жанр. Это улучшит навигацию и поиск по сайту.

Отображение Custom Post Type на сайте

После регистрации CPT и таксономий нужно вывести их на фронтенде. Для этого создайте файлы шаблонов в теме:

  • archive-books.php — для списка всех книг;
  • single-books.php — для отображения одной книги.

Пример простого цикла для archive-books.php:

<?php get_header(); ?>

<h1>Каталог книг</h1>

<?php if ( have_posts() ) : ?>
    <ul>
    <?php while ( have_posts() ) : the_post(); ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>Книги не найдены.</p>
<?php endif; ?>

<?php get_footer(); ?>

Похожим образом можно вывести отдельную запись в single-books.php, добавив вывод произвольных полей и таксономий.

Реальные кейсы использования Custom Post Type

Custom Post Types — отличный инструмент для сайтов разной тематики:

  • Портфолио для дизайнеров и фотографов;
  • Каталоги продукции с фильтрами и атрибутами;
  • События и мероприятия с датами и местами проведения;
  • Отзывы клиентов и партнеров;
  • Рецепты, вакансии, объявления — любые отдельные сущности.

Благодаря CPT можно сделать структуру сайта максимально удобной для управления и масштабирования.

Советы по оптимизации и безопасности

Несколько рекомендаций:

  • Используйте уникальные префиксы для функций и имён CPT, чтобы избежать конфликтов (например, wpcat_register_custom_post_type).
  • Обязательно регистрируйте CPT на хук init, чтобы всё корректно инициализировалось.
  • Если не используете REST API, отключайте его для CPT в параметрах ('show_in_rest' => false), чтобы снизить нагрузку.
  • Для сложных проектов лучше создавать отдельный плагин для CPT, а не писать код в functions.php.
  • Тестируйте пермалинки после добавления CPT — иногда нужно обновить настройки ссылок в админке.
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее