Как создать уникальный тип записи WordPress с поддержкой метаполей

Введение в кастомные типы записей и метаполя WordPress

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

В этой статье мы расскажем, как программно зарегистрировать кастомный тип записи с поддержкой метаполей, рассмотрим примеры кода и разберём, как использовать плагины для упрощения работы.

Регистрация кастомного типа записи в WordPress

Для начала создадим кастомный тип записи «Курс» (например, для сайта wp-course.ru это актуально). Для регистрации используем функцию register_post_type. Рекомендуется добавлять этот код в файл functions.php темы или в свой плагин.

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

    $args = [
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => ['slug' => 'courses'],
        'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'],
        'show_in_rest' => true // для поддержки Gutenberg и REST API
    ];

    register_post_type('wp_course_course', $args);
}

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

Добавление метаполей: зачем и как

Метаполя позволяют добавить к курсу дополнительные данные: цену, длительность, ссылку на видео и пр. Рассмотрим два способа: вручную через код и с помощью плагина.

Добавление метаполей вручную через код

Для добавления метаполей в редактор используем хуки add_meta_boxes и сохраняем данные через save_post.

add_action('add_meta_boxes', 'wp_course_add_course_meta_box');
function wp_course_add_course_meta_box() {
    add_meta_box(
        'wp_course_meta',
        'Дополнительные данные курса',
        'wp_course_render_meta_box',
        'wp_course_course',
        'normal',
        'default'
    );
}

function wp_course_render_meta_box($post) {
    wp_nonce_field('wp_course_save_meta_box', 'wp_course_meta_box_nonce');

    $price = get_post_meta($post->ID, '_wp_course_price', true);
    $duration = get_post_meta($post->ID, '_wp_course_duration', true);

    echo '<label for="wp_course_price">Цена (руб.)</label><br>';
    echo '<input type="number" id="wp_course_price" name="wp_course_price" value="' . esc_attr($price) . '" style="width:100%;"><br><br>';

    echo '<label for="wp_course_duration">Длительность (часов)</label><br>';
    echo '<input type="number" id="wp_course_duration" name="wp_course_duration" value="' . esc_attr($duration) . '" style="width:100%;">';
}

add_action('save_post', 'wp_course_save_meta_box_data');
function wp_course_save_meta_box_data($post_id) {
    if (!isset($_POST['wp_course_meta_box_nonce'])) return;
    if (!wp_verify_nonce($_POST['wp_course_meta_box_nonce'], 'wp_course_save_meta_box')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    if (isset($_POST['wp_course_price'])) {
        update_post_meta($post_id, '_wp_course_price', sanitize_text_field($_POST['wp_course_price']));
    }
    if (isset($_POST['wp_course_duration'])) {
        update_post_meta($post_id, '_wp_course_duration', sanitize_text_field($_POST['wp_course_duration']));
    }
}

Теперь при создании или редактировании курса можно указать цену и длительность.

Использование плагина Advanced Custom Fields для метаполей

Если хочется упростить работу и добавить метаполя без кода, отлично подойдёт плагин Advanced Custom Fields (ACF). Он позволяет создавать удобные группы полей в админке, поддерживает разные типы данных и вывод значений в шаблонах.

После установки плагина создайте группу полей, привяжите её к типу записи «Курсы», добавьте поля «Цена» и «Длительность».

Вывод кастомного типа записи и метаполей в шаблоне

Для отображения курсов на сайте нужно создать шаблон или использовать WP_Query. Пример вывода списка курсов с ценой и длительностью:

$args = [
    'post_type' => 'wp_course_course',
    'posts_per_page' => 10
];
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<ul class="wp-course-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $price = get_post_meta(get_the_ID(), '_wp_course_price', true);
        $duration = get_post_meta(get_the_ID(), '_wp_course_duration', true);

        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> - ';
        echo 'Цена: ' . esc_html($price) . ' руб., '; 
        echo 'Длительность: ' . esc_html($duration) . ' часов</li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo '<p>Курсы не найдены.</p>';
}

Этот код можно вставить в шаблон темы или в файл page-courses.php, чтобы вывести страницу со всеми курсами.

Рекомендации по безопасности и производительности

При работе с кастомными типами записей и метаполями важно соблюдать меры безопасности:

  • Используйте wp_nonce_field и проверяйте nonce при сохранении данных.
  • Фильтруйте и санитизируйте пользовательский ввод с помощью функций sanitize_text_field, esc_html и т.д.
  • Для вывода используйте esc_html или другие функции экранирования.

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

Заключение

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

Для ускорения разработки рекомендуем обратить внимание на Clearfy Pro — плагин для оптимизации и управления функционалом WordPress, который также упрощает работу с кастомными типами записей и метаполями.

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

⭐⭐⭐⭐⭐
WooCommerce: как правильно установить лимит на количество товаров в корзине
22.04.2026
Как создать автоматические подписки на новые статьи WordPress с помощью кода и плагинов
26.01.2026
Как использовать AJAX в WordPress для форм и обновления контента
13.01.2026
Как автоматизировать создание резервных копий WordPress: лучшие плагины и примеры кода
03.12.2025
Как создать автоматические редиректы в WordPress: практическое руководство с примерами
16.04.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее