В одной из предыдущих статей мы рассматривали, что такое произвольные или пользовательские типы записей в WordPress. Напомним, что типы записей представляют собой термин, который используется для указания различных видов контента на платформе WordPress. По умолчанию система предлагает пять типов: записи, страницы, медиафайлы, навигационные меню и редакции. Все данные хранятся в таблице записей wp_posts в базе данных и различаются по столбцу post_type.
Типы записей необходимы для удобного различения различных категорий контента в WordPress. Например, Записи и Страницы — это два типа постов, однако они служат разным целям (подробнее в статье о различиях между записями и страницами в WordPress).
Также в WordPress существует концепция таксономий. Таксономии помогают группировать записи определенного типа.
По умолчанию в WordPress имеются две таксономии: категории и теги, которые также имеют свои специфические отличия (см. статью о различиях между метками и категориями). Однако в ряде случаев требуется больше, чем просто категории и теги. WordPress предоставляет возможность создавать собственные таксономии, которые можно использовать в своих типах записей для упорядочивания и классификации контента.
Зачем создавать пользовательский тип записей или таксономию?
Теоретически вы можете добавлять любой тип контента в записи на платформе WordPress и классифицировать их с помощью категорий и тегов. Но это не всегда удобно и логично. Вот некоторые индикаторы, когда стоит создать собственный тип записей, таксономию, или и то, и другое.
- Контент, который вы собираетесь публиковать, не соответствует формату обычной записи (например, купоны для интернет-магазинов).
- Отсутствие какой-либо хронологии публикаций (например, словарь, отсортированный по алфавиту).
- Категории и теги не могут эффективно сгруппировать или отсортировать конкретный контент.
- Необходимость в дополнительных полях в записях или страницах для ввода дополнительной информации.
- Требуется отображение конкретного контента в ином формате, отличающемся от записей или страниц.
Рассмотрим на конкретном примере. Допустим, вы ведете блог, в котором, помимо прочего, регулярно публикуете рецензии на фильмы, которые пользуются большой популярностью. Возможно, вы захотите улучшить свои рецензии, добавив такие функции, как рейтинги, возможность поиска по именам актеров, жанрам и т.д. В такой ситуации было бы разумно создать собственный тип записей для рецензий на фильмы и добавить таксономию для сортировки по жанрам и актерским ролям.
Еще один пример — создание портфолио для художника, фотографа или музыканта. В дополнение к текстовому контенту можно выделить отдельный раздел для удобного отображения и сортировки своих работ.
Как создать произвольный тип записей в WordPress?
Существует два метода для создания произвольного типа записей и их таксономий — через плагин и вручную. Рассмотрим оба варианта.
Создание произвольного типа записей с помощью плагина Custom Post Type UI
Первым делом необходимо установить и активировать плагин Custom Post Type UI. После этого в административном меню появится новый пункт CPT UI.
Для создания нового пользовательского типа записи, следует перейти в раздел CPT UI -> Add/Edit Post Types.

В поле Post Type Slug задайте уникальное название для вашего типа записей. Используйте только латиницу и цифры; другие символы не допустимы.
В качестве примера создадим тип movie (каталог фильмов).
В следующем поле (Plural Label) нужно указать ярлык для пользовательского типа записей. Это название будет видно в административной панели WordPress, как, например, Записи или Страницы. Рекомендуется использовать множественное число.
Параметр Singular Label представляет собой единственную форму для вашего типа записи и будет применяться WordPress для отображения подсказок и других элементов интерфейса.
Вы также можете добавить описание для нового типа записей в поле Post Type Description (это необязательно).

После этого нажмите на кнопку Add Post Type, чтобы создать новый тип записи.
Остальные параметры в блоке Additional Labels отвечают за отображение элементов нового типа в административной панели при выполнении различных операций (добавление, удаление, просмотр, сортировка и т.д.)
Хотите создать произвольный тип записей для своих рецептов? Подумайте ещё раз, ведь есть готовый шаблон WordPress под названием Cook It WPShop.
Создание пользовательского типа записей вручную
Создать новый тип записей с помощью плагина — это просто, но есть один нюанс. В случае деактивации или удаления плагина ваши пользовательские типы записей перестанут существовать. Данные, касающиеся зарегистрированных типов, останутся, но сам тип не будет доступен в системе.
Если по каким-либо причинам вы не можете использовать плагин, возможно, вам придется вручную добавить код для создания пользовательского типа записи в файл functions.php вашей активной темы или разработать отдельный плагин.
Вот пример кода, который позволяет вручную создать пользовательский тип записей:
function site_create_movies_posttype() { register_post_type( 'movies', array( 'labels' => array( 'name' => __( 'Фильмы' ), 'singular_name' => __( 'Фильм' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'movies'), ) ); } add_action( 'init', 'site_create_movies_posttype' );
Этот код регистрирует новый тип записей movies и включает массив аргументов. Этот массив состоит из двух частей: первая часть представляет метки, которые также являются массивом, а вторая – дополнительные параметры, такие как публичность, наличие архива и слаг. Они используются в URL для данного типа постов.
Теперь давайте рассмотрим код, который добавляет больше параметров к вашему пользовательскому типу записей.
function site_create_movies_posttype() { $labels = array( 'name' => _x( 'Фильмы', 'Тип записей Фильмы', 'root' ), 'singular_name' => _x( 'Фильм', 'Тип записей Фильмы', 'root' ), 'menu_name' => __( 'Фильмы', 'root' ), 'all_items' => __( 'Все фильмы', 'root' ), 'view_item' => __( 'Смотреть фильм', 'root' ), 'add_new_item' => __( 'Добавить новый фильм', 'root' ), 'add_new' => __( 'Добавить новый', 'root' ), 'edit_item' => __( 'Редактировать фильм', 'root' ), 'update_item' => __( 'Обновить фильм', 'root' ), 'search_items' => __( 'Искать фильм', 'root' ), 'not_found' => __( 'Не найдено', 'root' ), 'not_found_in_trash' => __( 'Не найдено в корзине', 'root' ), ); $args = array( 'label' => __( 'movies', 'root' ), 'description' => __( 'Каталог фильмов', 'root' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), 'taxonomies' => array( 'genres' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'movies', $args ); } add_action( 'init', 'site_create_movies_posttype', 0 );
В этом коде были добавлены дополнительные опции к пользовательскому типу записей movies, такие как поддержка ревизий, миниатюр, настраиваемых полей и многое другое.
Кроме того, этот тип записей был связать с пользовательской таксономией genres (Жанры).
Обратите внимание на многократное использование строки “root”. Это текстовый домен. Если ваша тема поддерживает переводы и вы желаете, чтобы ваши пользовательские типы постов также могли быть переведены, вам нужно указать текстовый домен, который используется в вашей теме. Его можно найти в файле style.css, который расположен в каталоге вашей темы, где он указан в заголовке файла.
Как на сайте показать записи пользовательского типа?
Система WordPress предлагает возможность отображения пользовательских типов записей. Существует несколько способов их реализации, каждый из которых имеет свои уникальные особенности.
Использование стандартного шаблона архивов для отображения пользовательского типа записей
Первоначально вы можете добавить основной пункт меню для вашего нового пользовательского типа записей. Для этого зайдите в административный раздел Внешний вид -> Меню и добавьте ссылку на пользовательский тип в нужное меню. На эту ссылку будут ссылаться записи вашего типа.
http://site.ru/movies
При переходе по этой ссылке вам будет показана страница архива для вашего пользовательского типа записей, при этом система применяет файл шаблона archive.php.
Создание собственных шаблонов для пользовательского типа записей
Если стандартный вид страницы архива не устраивает вас, то вы можете разработать свой собственный шаблон. Для этого создайте новый файл в директории вашей темы и назовите его archive-movies.php.
Чтобы начать, скопируйте содержимое файла archive.php вашей темы в archive-movies.php и изменяйте его по своему усмотрению. Теперь переходя по адресу http://site.ru/movies, система будет использовать шаблон archive-movies.php.
Кроме того, вы можете создать индивидуальный шаблон для отображения отдельной записи вашего типа, для этого создайте файл single-movies.php в каталоге темы. Начните с копирования содержимого single.php и вносите изменения по своему усмотрению.
Вывод пользовательского типа записей на главной странице
Основное преимущество пользовательских типов записей заключается в их отделении от стандартных Записей и Страниц. Если вам необходимо их отобразить на главной странице (http://site.ru), добавьте следующий код в файл functions.php вашей активной темы:
function site_add_movies_to_query( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'movies' ) ); return $query; } add_action( 'pre_get_posts', 'site_add_movies_to_query' );
Получение списка записей пользовательского типа
Для этого можно использовать следующий код с вызовом функции the_content():
$args = array( 'post_type' => 'movies', 'posts_per_page' => 10 ); $the_query = new WP_Query( $args ); ?> if ( $the_query->have_posts() ) : ?> while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
В представленном коде мы сперва определяем тип записей и количество отображаемых постов на странице в аргументах для нового класса WP_Query. Затем выполняется запрос, с помощью которого мы получаем записи и отображаем их в цикле WordPress.
Также рекомендуем ознакомиться с информацией о том, что такое Query Posts в WordPress и как им пользоваться.
Отображение пользовательских типов записей в виджетах
В WordPress уже есть стандартный виджет для вывода последних записей, но он не поддерживает выбор пользовательских типов записей. Тем не менее, есть надежный способ, позволяющий это реализовать.
Также рекомендуем: Как создать виджет на сайте WordPress.
Для начала установите и активируйте бесплатный плагин Ultimate Posts Widget. После этого в административной панели перейдите в раздел Внешний вид -> Виджеты и перетащите виджет Ultimate Posts на боковую панель.
Этот мощный виджет позволяет отображать последние записи любого типа на вашем сайте. Вы можете также показать отрывок из записи с ссылкой для получения дополнительной информации или миниатюру поста.

При разработке пользовательских шаблонов не забывайте о пагинации. Например, вместо стандартной навигации с номерами страниц можно реализовать функцию подгрузки записей по кнопке «Показать ещё».
