Как создать собственный тип записей в WordPress с примерами кода

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

Что такое пользовательский тип записей в WordPress и зачем он нужен

По умолчанию WordPress предлагает два основных типа контента: записи (posts) и страницы (pages). Но часто этого недостаточно, и чтобы структурировать данные правильно, нужно создавать свои типы записей. Например, если у вас сайт агентства, вы можете завести отдельный тип записей для проектов, сотрудников или отзывов.

Пользовательские типы записей интегрируются в админ-панель, могут иметь собственные метабоксы, таксономии и шаблоны вывода. Это дает гибкость и мощь, позволяя превратить WordPress в полноценный CMS.

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

Регистрация пользовательского типа записей: базовый пример

Для регистрации CPT используется функция register_post_type(). Вот базовый пример для создания типа записей «proekt» (проект):

function wpcoder_register_post_type_proekt() {
    $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' => 'proekty'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest'       => true, // для поддержки Gutenberg
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );

    register_post_type('proekt', $args);
}
add_action('init', 'wpcoder_register_post_type_proekt');

Этот код добавит новый раздел «Проекты» в админку, где можно создавать, редактировать и удалять записи этого типа.

Разбор параметров

labels — массив с названиями и подсказками для интерфейса.

public — делает тип записи видимым на сайте и в админке.

has_archive — включает архивную страницу с адресом example.com/proekty/.

rewrite — настраивает URL. Здесь указали slug для ЧПУ.

supports — указывает, какие стандартные поля поддерживаются.

show_in_rest — необходим для работы с редактором Gutenberg и REST API.

menu_icon — задает иконку в меню админки.

Добавление пользовательских таксономий для CPT

Чтобы структурировать записи типа «Проект» удобнее, имеет смысл добавить собственные таксономии (категории или метки). Например, создадим таксономию «Тип проекта».

function wpcoder_register_taxonomy_proekt_type() {
    $labels = array(
        'name'              => 'Типы проектов',
        'singular_name'     => 'Тип проекта',
        'search_items'      => 'Поиск типов проектов',
        'all_items'         => 'Все типы проектов',
        'edit_item'         => 'Редактировать тип проекта',
        'add_new_item'      => 'Добавить новый тип проекта',
        'menu_name'         => 'Типы проектов',
    );

    $args = array(
        'hierarchical'      => true, // как категории
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'tip-proekta'),
        'show_in_rest'      => true,
    );

    register_taxonomy('tip_proekta', array('proekt'), $args);
}
add_action('init', 'wpcoder_register_taxonomy_proekt_type');

Теперь в админке у проектов появится дополнительное поле для выбора типа проекта. Это удобно для фильтрации и группировки.

Вывод пользовательских типов записей на фронтенде

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

Пример вывода последних 5 проектов с их заголовками и ссылками:

$args = array(
    'post_type'      => 'proekt',
    'posts_per_page' => 5,
);
$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>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo '<p>Проекты не найдены.</p>';
}

Такой код можно вставить в шаблон темы или в шорткод для удобства.

Создание шорткода для вывода проектов

Если нужно выводить проекты в любом месте контента, удобно сделать шорткод. Пример:

function wpcoder_shortcode_proekty_list($atts) {
    $atts = shortcode_atts(array(
        'count' => 5,
    ), $atts, 'proekty_list');

    $args = array(
        'post_type'      => 'proekt',
        'posts_per_page' => intval($atts['count']),
    );
    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return '<p>Проекты не найдены.</p>';
    }

    $output = '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul>';
    wp_reset_postdata();

    return $output;
}
add_shortcode('proekty_list', 'wpcoder_shortcode_proekty_list');

Теперь в редакторе можно вставить [proekty_list count="10"] и вывести 10 последних проектов.

Плагины для работы с CPT и таксономиями

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

  • Custom Post Type UI — один из самых популярных плагинов для создания и управления CPT и таксономиями через интерфейс.
  • Pods — мощный инструмент для создания и управления кастомными типами записей, таксономиями и дополнительными полями.
  • Advanced Custom Fields (ACF) — помогает создавать удобные метаполя для CPT, расширяя функционал.

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

Лучшие практики и советы по работе с CPT

Создавая собственные типы записей, учитывайте следующие моменты:

  • Регистрируйте CPT и таксономии в отдельном плагине, а не в теме, чтобы сохранить данные при смене шаблона.
  • Используйте уникальные префиксы для функций и таксономий, чтобы избежать конфликтов (например, wpcoder_).
  • Добавляйте поддержку REST API через параметр show_in_rest для совместимости с Gutenberg и внешними сервисами.
  • Создавайте шаблоны вывода: archive-proekt.php и single-proekt.php в теме для кастомного отображения.
  • Оптимизируйте запросы WP_Query, чтобы не загружать лишние данные и использовать кеширование.

Заключение

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

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

Как удалить или сбросить пароль в WordPress через базу данных MySQL
17.04.2026
WordPress отладка проблем с кэшем и кэш-плагинами: практические решения
08.12.2025
Создание шорткодов для вывода данных в WordPress
04.11.2025
Создание динамических QR-кодов в WordPress с помощью PHP
27.12.2025
Как создать собственный тип записей в WordPress с примерами кода
30.11.2025