wpwebsite.ru wordpress WPWebSite

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

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

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

Уникальные типы записей — это способ расширить стандартную структуру WordPress, добавив новые сущности, которые ведут себя как записи, но имеют собственный набор полей, метаданных и шаблонов отображения. Например, можно создать тип "Портфолио", "Отзывы", "Проекты" или "События".

Использование CPT позволяет:

  • Структурировать контент более логично для пользователя и администратора;
  • Создавать отдельные шаблоны для разных типов контента;
  • Улучшать SEO за счёт уникальных URL и метаданных;
  • Облегчать работу с большим объёмом данных.

На wpwebsite.ru создание и настройка CPT — частая задача для кастомизации сайтов клиентов.

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

Для регистрации CPT используется функция register_post_type. Ниже пример простейшей регистрации типа "portfolio" в файле functions.php вашей темы или в собственном плагине.

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

  $args = array(
    'labels' => $labels,
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'portfolio'),
    'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
    'show_in_rest' => true, // для Gutenberg и REST API
  );

  register_post_type('wpwebsite_portfolio', $args);
}
add_action('init', 'wpwebsite_register_portfolio_cpt');

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

Расширение функционала: кастомные таксономии и метаполя

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

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

  register_taxonomy('wpwebsite_project_type', 'wpwebsite_portfolio', array(
    'labels' => $labels,
    'hierarchical' => true,
    'show_in_rest' => true,
    'rewrite' => array('slug' => 'project-type'),
  ));
}
add_action('init', 'wpwebsite_register_portfolio_taxonomy');

Для добавления метаполей удобнее использовать плагины, например Clearfy Pro, который позволяет создавать пользовательские поля без кода, или Advanced Custom Fields (ACF).

Пример добавления метаполя вручную:

function wpwebsite_add_portfolio_meta_box() {
  add_meta_box('wpwebsite_portfolio_details', 'Детали портфолио', 'wpwebsite_portfolio_meta_box_callback', 'wpwebsite_portfolio', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpwebsite_add_portfolio_meta_box');

function wpwebsite_portfolio_meta_box_callback($post) {
  $client = get_post_meta($post->ID, '_wpwebsite_client', true);
  echo '<label for="wpwebsite_client">Клиент:</label>';
  echo '<input type="text" id="wpwebsite_client" name="wpwebsite_client" value="'.esc_attr($client).'" size="25" />';
}

function wpwebsite_save_portfolio_meta($post_id) {
  if (array_key_exists('wpwebsite_client', $_POST)) {
    update_post_meta($post_id, '_wpwebsite_client', sanitize_text_field($_POST['wpwebsite_client']));
  }
}
add_action('save_post', 'wpwebsite_save_portfolio_meta');

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

Кроме Clearfy Pro, есть несколько плагинов, которые значительно упрощают создание и настройку CPT:

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

Для профессиональных сайтов, где требуется интеграция CPT с REST API и Gutenberg, стоит обратить внимание на тему Reboot от WPSHOP, которая изначально оптимизирована под кастомные типы.

Как вывести уникальные типы записей на фронтенде: примеры шаблонов и запроса WP_Query

Чтобы отображать CPT на сайте, нужно создать шаблон архива или отдельной записи. Файл архива должен называться archive-wpwebsite_portfolio.php, а одиночной записи — single-wpwebsite_portfolio.php.

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

$args = array(
  'post_type' => 'wpwebsite_portfolio',
  'posts_per_page' => 5,
);
$query = new WP_Query($args);

if ($query->have_posts()) {
  while ($query->have_posts()) {
    $query->the_post();
    echo '<h2>' . get_the_title() . '</h2>';
    the_excerpt();
  }
  wp_reset_postdata();
} else {
  echo 'Портфолио не найдено';
}

Также можно выводить метаполя и таксономии, используя функции get_post_meta и get_the_terms.

Пример вывода метаполя "Клиент" и таксономии "Тип проекта"

while ($query->have_posts()) {
  $query->the_post();
  $client = get_post_meta(get_the_ID(), '_wpwebsite_client', true);
  $types = get_the_terms(get_the_ID(), 'wpwebsite_project_type');

  echo '<h2>' . get_the_title() . '</h2>';
  echo '<p><strong>Клиент:</strong> ' . esc_html($client) . '</p>';

  if (!empty($types) && !is_wp_error($types)) {
    $type_names = wp_list_pluck($types, 'name');
    echo '<p><strong>Тип проекта:</strong> ' . implode(', ', $type_names) . '</p>';
  }
}
wp_reset_postdata();

SEO и пермалинки для уникальных типов записей

При создании CPT важно настроить правильные URL, чтобы они были понятными и дружелюбными для поисковиков. В параметрах rewrite указывайте уникальный slug, например portfolio. После регистрации CPT рекомендуется перейти в "Настройки > Постоянные ссылки" и сохранить их заново, чтобы обновить правила перезаписи.

Рекомендуется также использовать SEO-плагины, поддерживающие CPT, например Clearfy Pro, чтобы улучшить SEO-настройки для каждого типа записи.

Типичные ошибки при создании уникальных типов записей и как их избежать

Часто встречаются следующие проблемы:

  • Неверный префикс в функции регистрации, из-за чего CPT конфликтует с другими плагинами;
  • Отсутствие параметра show_in_rest, из-за чего CPT не отображается в редакторе Gutenberg;
  • Не обновлены правила пермалинков после регистрации CPT;
  • Плохая поддержка таксономий и метаполей, из-за чего контент сложно структурировать;
  • Отсутствие шаблонов для отображения CPT на фронтенде.

Решение — использовать аккуратный префикс (wpwebsite_), проверять все параметры и тестировать вывод на сайте.

Выводы и рекомендации для wpwebsite.ru

Создание уникальных типов записей — мощный инструмент для расширения функционала WordPress. Правильно реализованные CPT улучшают структуру сайта, удобство управления и SEO. Для wpwebsite.ru советую использовать регистрируемые вручную CPT с префиксом wpwebsite_, дополнять их таксономиями и метаполями через плагины Clearfy Pro или ACF, а также создавать отдельные шаблоны для фронтенда.

Если нужно быстро создать CPT без кода, можно использовать Custom Post Type UI. Для комплексных проектов с большим количеством типов и связей подойдет Pods или Toolset.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙