Custom Post Types (CPT), или Пользовательские типы записей, — это мощный инструмент в WordPress, позволяющий расширить функциональность платформы за пределы стандартных типов контента (Записи и Страницы). Они позволяют создавать собственные типы контента с уникальными полями, настройками отображения и логикой.
В этом руководстве мы рассмотрим все аспекты работы с CPT в WordPress: от основ до продвинутых техник.
Содержание:
- Что такое Custom Post Types (CPT)?
- Зачем использовать CPT?
- Способы создания CPT:
- Ручное создание через
functions.php - Использование плагинов
- Ручное создание через
- Регистрация CPT в
functions.php(подробно) - Добавление таксономий к CPT
- Создание пользовательских полей для CPT:
- Advanced Custom Fields (ACF)
- Meta Box
- Отображение CPT на сайте:
- В шаблонах темы
- Использование шорткодов
- Продвинутые техники:
- Создание пользовательских типов записей для WooCommerce
- Работа с REST API
- Рекомендации и лучшие практики
- Полезные ресурсы
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. Полезные ресурсы:
- Официальная документация WordPress по Custom Post Types: https://developer.wordpress.org/rest-api/reference/custom-post-types/
- Custom Post Type UI Plugin: https://en-us.wpmudev.org/plugins/custom-post-type-ui/
- Advanced Custom Fields (ACF) Plugin: https://www.advancedcustomfields.com/
- Meta Box Plugin: https://metabox.io/
Надеюсь, это руководство поможет вам освоить Custom Post Types в WordPress и расширить функциональность вашего сайта! Удачи!