Как добавить собственные типы записей (Custom Post Types) в WordPress

|

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

Что такое собственные типы записей и зачем они нужны

Собственные типы записей — это отдельные сущности, которые позволяют хранить и отображать контент, отличный от стандартных постов и страниц. Например, если вы создаёте сайт для кинотеатра, то логично завести CPT «Фильмы», где будут храниться все данные о фильмах. Или для сайта недвижимости — CPT «Объекты недвижимости».

Преимущества CPT:

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

Создание собственного типа записей с помощью кода

Для регистрации собственного типа записей используется функция register_post_type(). Лучше всего регистрировать CPT внутри хука init. Рассмотрим пример создания CPT «wppremium_movie» для сайта с фильмами.

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

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'movies'),
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest' => true,
    );

    register_post_type('wppremium_movie', $args);
}
add_action('init', 'wppremium_register_cpt_movie');

В этом примере мы задаём метки для интерфейса, включаем поддержку заголовка, редактора, миниатюр и произвольных полей. Также включаем REST API поддержку через show_in_rest, что полезно для Gutenber и внешних API.

После добавления такого кода в файл functions.php вашей темы или в отдельный плагин, в админ-панели появится новый пункт меню «Фильмы».

Использование плагинов для создания Custom Post Types

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

Для примера рассмотрим Custom Post Type UI:

  1. Установите и активируйте плагин.
  2. Перейдите в меню «CPT UI» > «Add/Edit Post Types».
  3. Заполните поля: уникальный слаг, название, метки.
  4. Настройте поддержку заголовков, редактора, миниатюр и т.п.
  5. Сохраните и проверьте появление нового типа записей в админке.

Такой подход особенно удобен для тех, кто не хочет погружаться в тонкости кода.

Как добавить мета-поля для собственного типа записей

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

Пример создания мета-поля вручную с помощью метабоксов:

function wppremium_add_movie_metabox() {
    add_meta_box(
        'wppremium_movie_details',
        'Детали фильма',
        'wppremium_movie_metabox_callback',
        'wppremium_movie',
        'normal',
        'default'
    );
}
add_action('add_meta_boxes', 'wppremium_add_movie_metabox');

function wppremium_movie_metabox_callback($post) {
    wp_nonce_field('wppremium_save_movie_metabox', 'wppremium_movie_nonce');
    $release_date = get_post_meta($post->ID, '_wppremium_release_date', true);
    echo '<label for="wppremium_release_date">Дата выхода:</label> ';
    echo '<input type="date" id="wppremium_release_date" name="wppremium_release_date" value="'.esc_attr($release_date).'" />';
}

function wppremium_save_movie_metabox($post_id) {
    if (!isset($_POST['wppremium_movie_nonce'])) return;
    if (!wp_verify_nonce($_POST['wppremium_movie_nonce'], 'wppremium_save_movie_metabox')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    if (isset($_POST['wppremium_release_date'])) {
        update_post_meta($post_id, '_wppremium_release_date', sanitize_text_field($_POST['wppremium_release_date']));
    }
}
add_action('save_post', 'wppremium_save_movie_metabox');

В данном примере создаётся метабокс с датой выхода фильма. При сохранении поста данные сохраняются в метаполе.

Вывод собственных типов записей на сайте

Чтобы выводить записи CPT на фронтенде, можно создать отдельный шаблон archive-wppremium_movie.php или использовать WP_Query внутри шаблонов.

Пример простого цикла для вывода фильмов:

$args = array(
    'post_type' => 'wppremium_movie',
    'posts_per_page' => 10
);
$movies = new WP_Query($args);
if ($movies->have_posts()) {
    while ($movies->have_posts()) {
        $movies->the_post();
        echo '<h2>'.get_the_title().'</h2>';
        echo '<div>'.get_the_content().'</div>';
        $release_date = get_post_meta(get_the_ID(), '_wppremium_release_date', true);
        if ($release_date) {
            echo '<p>Дата выхода: '.esc_html($release_date).'</p>';
        }
    }
    wp_reset_postdata();
} else {
    echo 'Фильмы не найдены';
}

Так вы сможете вывести кастомный контент в любом месте темы.

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

Чтобы работа с CPT была комфортной и эффективной, рекомендуем придерживаться следующих правил:

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

Как удалить пустые мета поля в WordPress через код и плагины
24.02.2026
Как удалить пользовательские данные при удалённой регистрации WordPress
21.02.2026
Как использовать хуки WooCommerce для дополнительного функционала
16.01.2026
Как удалить пустые категории в WordPress без плагинов
30.01.2026
WooCommerce: решение проблемы с отсутствием писем подтверждения заказов
17.06.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »