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

|

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

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

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

Custom Post Type — это не просто категория или тег, а отдельный структурированный тип данных, который WordPress понимает и обрабатывает отдельно.

Основные преимущества CPT:

Регистрация собственного типа записей: функция wpzoom_register_custom_post_type

Для создания CPT в WordPress используется функция register_post_type(). Чтобы сделать код удобным и модульным, создадим функцию с префиксом wpzoom_, которая будет регистрировать наш тип записей.

Ниже пример создания типа записей portfolio для сайта с портфолио проектов:

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

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array('slug' => 'portfolio'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
    );

    register_post_type('portfolio', $args);
}
add_action('init', 'wpzoom_register_custom_post_type');

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

Объяснение ключевых параметров

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

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

Для регистрации таксономий используется функция register_taxonomy(). Добавим функцию wpzoom_register_custom_taxonomy для создания таксономии project_type:

function wpzoom_register_custom_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' => 'project-type'),
    );

    register_taxonomy('project_type', array('portfolio'), $args);
}
add_action('init', 'wpzoom_register_custom_taxonomy');

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

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

После создания CPT важно правильно выводить записи на сайте. Для этого можно создать шаблон архива и отдельной записи.

Если в теме нет файлов archive-portfolio.php и single-portfolio.php, WordPress по умолчанию будет использовать archive.php и single.php. Но лучше создать отдельные шаблоны, чтобы настроить вывод именно для портфолио.

Пример базового шаблона архива (archive-portfolio.php)

<?php get_header(); ?>
<section class="portfolio-archive">
  <h1>Портфолио</h1>
  <div class="portfolio-items">
    <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
          <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
          <div class="portfolio-excerpt"><?php the_excerpt(); ?></div>
        </article>
      <?php endwhile; ?>
    <?php else : ?>
      <p>Проекты не найдены.</p>
    <?php endif; ?>
  </div>
</section>
<?php get_footer(); ?>

Такой шаблон выведет список всех проектов портфолио с заголовками и краткими описаниями.

Добавление метаполей для собственного типа записей

Для расширения информации о записи можно добавить метаполя — дополнительные данные, например, URL проекта, дату выполнения, бюджет и т.п.

Для этого обычно используют плагины Advanced Custom Fields (ACF) или пишут собственный код с использованием хуков add_meta_box и save_post.

Пример добавления метабокса с полем URL проекта

function wpzoom_add_portfolio_metabox() {
    add_meta_box(
        'wpzoom_portfolio_url',
        'URL проекта',
        'wpzoom_portfolio_url_callback',
        'portfolio',
        'normal',
        'default'
    );
}
add_action('add_meta_boxes', 'wpzoom_add_portfolio_metabox');

function wpzoom_portfolio_url_callback($post) {
    wp_nonce_field('wpzoom_save_portfolio_url', 'wpzoom_portfolio_url_nonce');
    $value = get_post_meta($post->ID, '_portfolio_url', true);
    echo '<label for="wpzoom_portfolio_url_field">Введите URL:</label> ';
    echo '<input type="url" id="wpzoom_portfolio_url_field" name="wpzoom_portfolio_url_field" value="' . esc_attr($value) . '" size="25" />';
}

function wpzoom_save_portfolio_url($post_id) {
    if (!isset($_POST['wpzoom_portfolio_url_nonce'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['wpzoom_portfolio_url_nonce'], 'wpzoom_save_portfolio_url')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['post_type']) && 'portfolio' == $_POST['post_type']) {
        if (!current_user_can('edit_post', $post_id)) {
            return;
        }
    }
    if (!isset($_POST['wpzoom_portfolio_url_field'])) {
        return;
    }
    $my_data = sanitize_text_field($_POST['wpzoom_portfolio_url_field']);
    update_post_meta($post_id, '_portfolio_url', $my_data);
}
add_action('save_post', 'wpzoom_save_portfolio_url');

После добавления этого кода на странице редактирования проекта появится поле для ввода URL, которое сохранится и будет доступно для вывода.

Вывод метаполя в шаблоне single-portfolio.php

Чтобы показать URL проекта на странице отдельной записи, добавьте следующий код в шаблон:

<?php
$project_url = get_post_meta(get_the_ID(), '_portfolio_url', true);
if ($project_url) {
    echo '<p>Сайт проекта: <a href="' . esc_url($project_url) . '" target="_blank" rel="noopener">' . esc_html($project_url) . '</a></p>';
}
?>

Полезные плагины для работы с собственными типами записей

Хотя многое можно сделать вручную, для удобства и расширенных функций рекомендуем несколько плагинов:

Итоги и рекомендации по созданию собственных типов записей

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

Рекомендуется всегда использовать префиксы (например, wpzoom_) для своих функций и метаполей, чтобы избежать конфликтов с другими плагинами и темами.

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

WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
22.06.2026
Как добавить настройки в админ-панель WordPress: пошаговое руководство с примерами кода
27.11.2025
Как удалить лишние метаданные из изображений в WordPress для ускорения сайта
12.12.2025
Создать собственный виджет WordPress: подробное руководство с примерами кода
08.11.2025
Автоматическое удаление старых файлов из медиа библиотеки WordPress
10.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше