Как создать и использовать собственный Post Type в WordPress

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

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

Custom Post Type — это пользовательский тип записи, который расширяет стандартные возможности WordPress. Он позволяет создавать отдельные сущности с собственным набором полей, таксономий и логикой отображения. Это особенно удобно, если на сайте нужно структурировать контент по тематике или функционалу, отличному от обычных записей и страниц.

Например, если вы ведёте сайт кинотеатра, вам может понадобиться тип записи «Фильмы» с полями для режиссёра, года выпуска, жанра и т.д. Используя CPT, вы сможете легко создать отдельный раздел для этих данных, не смешивая их с блог-постами.

Кроме того, CPT отлично интегрируются с таксономиями и метаполями, что позволяет сделать админку и публичную часть сайта максимально удобными.

Создание собственного Post Type вручную через functions.php

Самый базовый способ создать CPT — добавить код в файл functions.php вашей темы или, что лучше, в отдельный плагин. Ниже пример создания простого типа записи «Проекты».

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

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'projects'),
        'show_in_rest'       => true,  // для поддержки Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );

    register_post_type('wp_puzzle_projects', $args);
}
add_action('init', 'wp_puzzle_register_post_type_projects');

Обратите внимание, что мы использовали префикс wp_puzzle_ в названии функции и типа записи — это хорошая практика для избежания конфликтов.

В этом коде:

  • labels — задают названия в админке;
  • public — делает тип записи видимым на сайте и в админке;
  • has_archive — включает архивную страницу с URL site.ru/projects;
  • rewrite — настраивает ЧПУ (человеко-понятный URL);
  • show_in_rest — позволяет редактировать записи CPT в редакторе Gutenberg;
  • supports — определяет, какие стандартные поля доступны (заголовок, редактор, миниатюра и т.д.).

Добавление кастомных таксономий для Custom Post Type

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

function wp_puzzle_register_taxonomy_project_type() {
    $labels = array(
        'name'              => 'Типы проектов',
        'singular_name'     => 'Тип проекта',
        'search_items'      => 'Поиск типов',
        'all_items'         => 'Все типы',
        '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' => 'project-type'),
        'show_in_rest'      => true,
    );

    register_taxonomy('wp_puzzle_project_type', array('wp_puzzle_projects'), $args);
}
add_action('init', 'wp_puzzle_register_taxonomy_project_type');

Теперь в админке появится удобный фильтр и возможность назначать проекты к определённым типам.

Использование плагинов для упрощения создания CPT

Если вы не хотите писать код, можно использовать популярные плагины для создания и управления Custom Post Types:

  • Custom Post Type UI — самый известный и простой плагин для регистрации CPT и таксономий через визуальный интерфейс.
  • Pods — мощный инструмент для создания CPT, таксономий и метаполей с возможностью расширенного управления.
  • Toolset Types — платный плагин для создания кастомных типов записей и полей с интеграцией в визуальные редакторы.

Использование плагинов удобно, когда нужно быстро настроить типы записей без программирования. Однако при сложной логике и кастомизации лучше всё же использовать код, чтобы избежать лишних нагрузок и ограничений.

Вывод записей собственного Post Type на фронтенде

Созданный CPT нужно правильно вывести на сайте. Для этого можно использовать WP_Query с параметром post_type. Пример вывода списка проектов:

<?php
$args = array(
    'post_type'      => 'wp_puzzle_projects',
    'posts_per_page' => 10,
);

$query = new WP_Query($args);

if ($query->have_posts()) :
    echo '<ul>';
    while ($query->have_posts()) : $query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    endwhile;
    echo '</ul>';
    wp_reset_postdata();
else :
    echo '<p>Проекты не найдены.</p>';
endif;
?>

Такой код можно вставить в шаблон темы, страницу через шаблон или использовать в кастомном плагине.

Создание шаблонов для Custom Post Type

Чтобы настроить отображение CPT на сайте, создайте в теме файлы шаблонов:

  • single-wp_puzzle_projects.php — шаблон для одиночного проекта;
  • archive-wp_puzzle_projects.php — шаблон для архива проектов.

Это позволит полностью контролировать вывод и оформление записей.

Добавление метаполей для расширения функционала CPT

Для хранения дополнительной информации (например, дата начала проекта, бюджет) можно добавить метаполя. Самый простой способ — использовать плагин Advanced Custom Fields (ACF), который позволяет создавать поля через админку и удобно выводить их в шаблонах.

Если хотите сделать это вручную, пример добавления метаполя в редактор записи:

function wp_puzzle_add_custom_meta_box() {
    add_meta_box(
        'wp_puzzle_project_details',
        'Детали проекта',
        'wp_puzzle_render_meta_box',
        'wp_puzzle_projects',
        'normal',
        'default'
    );
}
add_action('add_meta_boxes', 'wp_puzzle_add_custom_meta_box');

function wp_puzzle_render_meta_box($post) {
    $start_date = get_post_meta($post->ID, '_wp_puzzle_start_date', true);
    echo '<label for="wp_puzzle_start_date">Дата начала проекта:</label>';
    echo '<input type="date" id="wp_puzzle_start_date" name="wp_puzzle_start_date" value="' . esc_attr($start_date) . '" />';
}

function wp_puzzle_save_meta_box_data($post_id) {
    if (array_key_exists('wp_puzzle_start_date', $_POST)) {
        update_post_meta($post_id, '_wp_puzzle_start_date', sanitize_text_field($_POST['wp_puzzle_start_date']));
    }
}
add_action('save_post', 'wp_puzzle_save_meta_box_data');

Теперь при создании проекта можно указать дату начала, а в шаблонах вывести это поле функцией get_post_meta().

Советы по SEO для Custom Post Types

Чтобы CPT хорошо индексировались и не создавали проблем с SEO, стоит соблюсти несколько правил:

  • Обязательно задавайте правильные ЧПУ через параметр rewrite при регистрации CPT.
  • Используйте плагин SEO (Yoast SEO, Rank Math), который поддерживает CPT и позволяет настраивать метаданные.
  • Создавайте шаблоны архивов и одиночных страниц с корректным выводом заголовков и описаний.
  • Избегайте дублирования контента между CPT и обычными постами.

Заключение

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

Если вы хотите погрузиться глубже, рекомендую экспериментировать с кодом и изучать официальную документацию WordPress по Custom Post Types и таксономиям.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WP Puzzle: как установить и настроить ответ на частые вопросы (FAQ) в WordPress
28.11.2025
WordPress: как изменить URL опубликованной страницы без потери SEO
31.10.2025
Как установить ограничения на регистрацию пользователей в WordPress
21.01.2026
Как создать автоматическое сообщение о обновлении содержимого в WordPress
29.03.2026
WooCommerce: автоматическое создание отзывов после покупки
28.05.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее