CPT (Custom Post Types) в WordPress: Полное руководство

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

В этом руководстве мы рассмотрим все аспекты работы с CPT в WordPress: от основ до продвинутых техник.

Содержание:

  1. Что такое Custom Post Types (CPT)?
  2. Зачем использовать CPT?
  3. Способы создания CPT:
    • Ручное создание через functions.php
    • Использование плагинов
  4. Регистрация CPT в functions.php (подробно)
  5. Добавление таксономий к CPT
  6. Создание пользовательских полей для CPT:
    • Advanced Custom Fields (ACF)
    • Meta Box
  7. Отображение CPT на сайте:
    • В шаблонах темы
    • Использование шорткодов
  8. Продвинутые техники:
    • Создание пользовательских типов записей для WooCommerce
    • Работа с REST API
  9. Рекомендации и лучшие практики
  10. Полезные ресурсы

1. Что такое Custom Post Types (CPT)?

Стандартно WordPress предлагает два основных типа контента:

  • Записи (Posts): Для новостей, статей блога, хронологических публикаций.
  • Страницы (Pages): Для статического контента, такого как «О нас», «Контакты».

CPT позволяют вам создавать новые типы контента, например:

  • Продукты: Для интернет-магазина.
  • Портфолио: Для демонстрации ваших работ.
  • События: Для анонсов мероприятий.
  • Отзывы: Для публикации отзывов клиентов.
  • Книги: Для онлайн библиотеки.

Каждый CPT имеет свои собственные настройки, поля и логику отображения, что делает его отличным от других типов контента.

2. Зачем использовать CPT?

  • Организация контента: Разделение контента по типам упрощает управление сайтом и улучшает структуру данных.
  • Гибкость: Создание уникальных типов контента, адаптированных под ваши нужды.
  • SEO-дружественность: Более четкая структура контента помогает поисковым системам лучше понимать ваш сайт.
  • Расширяемость: Возможность добавления пользовательских полей и логики для каждого CPT.
  • Улучшение пользовательского опыта: Оптимизация отображения контента для конкретных типов записей.

3. Способы создания CPT:

  • Ручное создание через functions.php: Требует знания PHP и понимания структуры WordPress. Это самый гибкий, но и самый сложный способ.
  • Использование плагинов: Более простой способ, не требующий навыков программирования. Существует множество плагинов для создания CPT, таких как:
    • Custom Post Type UI: Самый популярный плагин для создания CPT и таксономий.
    • Pods — Custom Content Types and Fields: Мощный плагин с широкими возможностями.
    • Toolset Types: Платный плагин, предлагающий комплексное решение для управления контентом.

4. Регистрация CPT в functions.php (подробно)

Этот способ требует редактирования файла functions.php вашей темы (или дочерней темы). Будьте осторожны при редактировании этого файла, так как ошибки могут привести к неработоспособности сайта. Рекомендуется использовать дочернюю тему для внесения изменений.

function create_custom_post_type() {
    $labels = array(
        'name'               => _x( 'Продукты', 'Post Type General Name', 'textdomain' ),
        'singular_name'      => _x( 'Продукт', 'Post Type Singular Name', 'textdomain' ),
        'menu_name'          => __( 'Продукты', 'textdomain' ),
        'name_admin_bar'     => __( 'Продукт', 'textdomain' ),
        'archives'           => __( 'Архив продуктов', 'textdomain' ),
        'attributes'         => __( 'Атрибуты продукта', 'textdomain' ),
        'parent_item_colon'  => __( 'Родительский продукт:', 'textdomain' ),
        'all_items'          => __( 'Все продукты', 'textdomain' ),
        'add_new_item'       => __( 'Добавить новый продукт', 'textdomain' ),
        'add_new'            => __( 'Добавить продукт', 'textdomain' ),
        'new_item'           => __( 'Новый продукт', 'textdomain' ),
        'edit_item'          => __( 'Редактировать продукт', 'textdomain' ),
        'update_item'        => __( 'Обновить продукт', 'textdomain' ),
        'view_item'          => __( 'Просмотреть продукт', 'textdomain' ),
        'view_items'         => __( 'Просмотреть продукты', 'textdomain' ),
        'search_items'       => __( 'Найти продукт', 'textdomain' ),
        'not_found'          => __( 'Продукты не найдены', 'textdomain' ),
        'not_found_in_trash' => __( 'Продукты не найдены в корзине', 'textdomain' ),
        'featured_image'     => __( 'Изображение продукта', 'textdomain' ),
        'set_featured_image' => __( 'Установить изображение продукта', 'textdomain' ),
        'remove_featured_image' => __( 'Удалить изображение продукта', 'textdomain' ),
        'use_featured_image' => __( 'Использовать как изображение продукта', 'textdomain' ),
        'insert_into_item'   => __( 'Вставить в продукт', 'textdomain' ),
        'uploaded_to_this_item' => __( 'Загружено в этот продукт', 'textdomain' ),
    );

    $args = array(
        'label'                 => __( 'Продукт', 'textdomain' ),
        'description'           => __( 'Управление продуктами интернет-магазина.', 'textdomain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'revisions', 'author' ), // Поддержка различных функций
        'taxonomies'            => array( 'category', 'post_tag' ), // Таксономии, которые будут использоваться
        'hierarchical'          => false, // Иерархический тип (как страницы) или плоский (как записи)
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5, // Позиция в меню админ-панели
        'menu_icon'             => 'dashicons-cart', // Иконка в меню админ-панели
        'can_export'            => true,
        'has_archive'           => true,
        'rewrite'               => array( 'slug' => 'products' ), // URL для архива CPT
    );

    register_post_type( 'product', $args );
}
add_action( 'init', 'create_custom_post_type' );

Разберем код:

  • $labels: Массив с текстовыми метками для CPT. Важно правильно перевести все строки для удобства использования в админ-панели.
  • $args: Массив с настройками CPT:
    • label: Название CPT, отображаемое в интерфейсе.
    • description: Описание CPT.
    • labels: Использует массив $labels, определенный выше.
    • supports: Определяет, какие функции будут поддерживаться для этого типа записей (заголовок, редактор, миниатюра, выдержка и т.д.).
    • taxonomies: Определяет таксономии, которые будут использоваться с этим типом записей.
    • hierarchical: Определяет, является ли CPT иерархическим (как страницы) или плоским (как записи).
    • public: Делает CPT публичным, доступным на сайте.
    • show_ui: Отображает интерфейс для управления CPT в админ-панели.
    • show_in_menu: Отображает CPT в меню админ-панели.
    • rewrite: Определяет URL для архива CPT.
  • register_post_type( 'product', $args ): Регистрирует CPT с ключом 'product' и настройками $args.
  • add_action( 'init', 'create_custom_post_type' ): Вызывает функцию create_custom_post_type() при инициализации WordPress.

5. Добавление таксономий к CPT

Таксономии позволяют классифицировать записи по категориям, тегам и другим параметрам. Вы можете использовать стандартные таксономии (категории, теги) или создавать собственные. Пример создания собственной таксономии:

function create_product_category() {
    $labels = array(
        'name'              => _x( 'Категории продуктов', 'taxonomy general name', 'textdomain' ),
        'singular_name'     => _x( 'Категория продукта', 'taxonomy singular name', 'textdomain' ),
        'menu_name'         => __( 'Категории продуктов', 'textdomain' ),
        'name_admin_bar'    => __( 'Категория продукта', 'textdomain' ),
        'parent_item'       => __( 'Родительская категория продукта', 'textdomain' ),
        'parent_item_colon' => __( 'Родительская категория продукта:', 'textdomain' ),
        'edit_item'         => __( 'Редактировать категорию продукта', 'textdomain' ),
        'update_item'       => __( 'Обновить категорию продукта', 'textdomain' ),
        'add_new_item'      => __( 'Добавить новую категорию продукта', 'textdomain' ),
        'new_item_name'     => __( 'Новое название категории продукта', 'textdomain' ),
        'search_items'      => __( 'Найти категорию продукта', 'textdomain' ),
    );

    $args = array(
        'hierarchical'      => true, // Иерархическая таксономия (как страницы)
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'product-category' ), // URL для архива таксономии
    );

    register_taxonomy( 'product_category', array( 'product' ), $args );
}
add_action( 'init', 'create_product_category' );

6. Создание пользовательских полей для CPT:

Пользовательские поля позволяют добавлять дополнительную информацию к записям CPT, например:

  • Цена: Для продуктов.
  • Размер: Для одежды.
  • Дата события: Для событий.

Существует два основных способа создания пользовательских полей:

  • Advanced Custom Fields (ACF): Самый популярный плагин для создания и управления пользовательскими полями. Прост в использовании, имеет широкий набор типов полей и интеграций с другими плагинами.
  • Meta Box: Мощный плагин с широкими возможностями настройки и поддержкой различных типов полей.

7. Отображение CPT на сайте:

  • В шаблонах темы: Используйте функции WordPress для получения и отображения данных CPT в ваших шаблонах. Например, WP_Query для запроса записей CPT и the_title(), the_content() для отображения заголовка и содержимого.
  • Использование шорткодов: Создайте шорткод, который будет выводить записи CPT на основе определенных параметров (например, количество записей, категория).

8. Продвинутые техники:

  • Создание пользовательских типов записей для WooCommerce: Расширьте функциональность WooCommerce с помощью CPT для создания новых типов продуктов или связанных товаров.
  • Работа с REST API: Используйте REST API WordPress для доступа к данным CPT из других приложений и сервисов.

9. Рекомендации и лучшие практики:

  • Планируйте структуру контента заранее: Определите, какие типы записей вам нужны и какие поля будут необходимы.
  • Используйте понятные имена для CPT и таксономий: Это упростит управление сайтом и улучшит SEO.
  • Добавляйте описания к CPT и таксономониям: Это поможет другим пользователям понять, что это за типы контента.
  • Используйте дочернюю тему для внесения изменений в functions.php: Это предотвратит потерю ваших изменений при обновлении темы.
  • Кэшируйте данные CPT: Это улучшит производительность сайта.

10. Полезные ресурсы:

Надеюсь, это руководство поможет вам освоить Custom Post Types в WordPress и расширить функциональность вашего сайта! Удачи!

Оставьте комментарий