Произвольные типы записей WordPress

Произвольные типы записей WordPress

16 сентября 2019 WordPress

Произвольные типы записей позволяют разделить посты не только по категориям, но и по их типу с собственными названиями и рубриками. Это что-то типо инфоблока, как в CMS 1С-Битрикс.

По умолчанию в WordPress есть возможность добавлять записи и их рубрики. К примеру на сайте необходимо создать раздел с портфолио. До появления кастомных типов записей приходилось создавать рубрику «Портфолио» и добавлять туда посты вперемешку с другими записями. Функционал был не такой разнообразный как хотелось бы, так как WP изначально создавался как движок для блогов. Но с ростом популярности появились и новые требования к функционалу.

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

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

Регистрируем тип записи

Код ниже разместите в файле functions.php в корне вашей темы.

add_action( 'init', 'true_register_post_type_init' ); // Использовать функцию только внутри хука init

function true_register_post_type_init() {
	$labels = array(
		'name' => 'Портфолио',
		'singular_name' => 'Проект', // админ панель Добавить->Функцию
		'add_new' => 'Добавить проект',
		'add_new_item' => 'Добавить новый проект', // заголовок тега <title>
		'edit_item' => 'Редактировать проект',
		'new_item' => 'Новый проект',
		'all_items' => 'Все проекты',
		'view_item' => 'Просмотр проекта на сайте',
		'search_items' => 'Искать проекты',
		'not_found' =>  'Проектов не найдено.',
		'not_found_in_trash' => 'В корзине нет проектов.',
		'menu_name' => 'Портфолио' // ссылка в меню в админке
	);
	$args = array(
		'labels' => $labels, // массив с названиями элементов
		'public' => true, // опубликовано
		'show_ui' => true, // показывать интерфейс в админке
		'has_archive' => true, // включить архивные страницы
		'menu_icon' => get_stylesheet_directory_uri() .'/img/icon.png', // иконка в меню
		'menu_position' => 20, // порядок в меню
		'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail') // включить заголовок, редактор, комментарии, автор, миниатюра записи
	);
	register_post_type('portfolio', $args);
 }

register_post_type('portfolio', $args); — собственно сама функция регистрации. Можно использовать любое имя для типов, кроме: post, page, attachment, revision, nav_menu_item, action, order, theme.

В массиве $labels по сути задаются названия для самого типа записей, кнопок, ссылок и других элементов отображаемых в админ-панели. Он же является значением ключа labels массива с настройками $args. Тут я думаю все понятно.

Массив $args добавляет настройки для нового типа записей. В примере я указал самые используемые:

labels — ключ со значением массива $labels, где заданы названия различных элементов отображаемых в админ-панели.
public — публикация типа записей. По умолчанию false. Ключ обязателен, иначе новый тип записей не будет отображаться даже в админке.
show_ui — при включении в админ-панели появится раздел с новым типом записей.
has_archive — у записей будут архивные страницы
menu_icon — путь к иконке меню, отображаемой в админ-панели
menu_position — порядок в меню админ-панели
supports — поддержка различного функционала, можно например включить поддержку комментирования и миниатюр. В данном примере включается заголовок, редактор, комментарии, автор и миниатюры записей.

Нужен бесплатный одноразовый телефонный номер? Тогда попробуйте сервис https://vydem.ru
Преимущества сервиса в том, что:

  • это традиционная мобильная связь, а значит не будет перебоев в общении, в отличие от интернет-каналов (вацап, зум и т.д.);
  • номера собеседников остаются скрыты друг от друга;
  • не расходуется интернет-трафик;
  • если надо переговорить в конференции, то не нужно друг с другом обмениваться контактами.

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

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

Для возможности создания рубрик необходимо добавить в массив $args новый ключ, с указанием таксономии рубрик. Примере ниже добавляет стандартные общие рубрики:

'taxonomies'  => array( 'category' ),

Код с поддержкой рубрик:

add_action( 'init', 'true_register_post_type_init' ); // Использовать функцию только внутри хука init

function true_register_post_type_init() {
	$labels = array(
		'name' => 'Портфолио',
		'singular_name' => 'Проект', // админ панель Добавить->Функцию
		'add_new' => 'Добавить проект',
		'add_new_item' => 'Добавить новый проект', // заголовок тега <title>
		'edit_item' => 'Редактировать проект',
		'new_item' => 'Новый проект',
		'all_items' => 'Все проекты',
		'view_item' => 'Просмотр проекта на сайте',
		'search_items' => 'Искать проекты',
		'not_found' =>  'Проектов не найдено.',
		'not_found_in_trash' => 'В корзине нет проектов.',
		'menu_name' => 'Портфолио' // ссылка в меню в админке
	);
	$args = array(
		'labels' => $labels, // массив с названиями элементов
		'public' => true, // опубликовано
		'show_ui' => true, // показывать интерфейс в админке
		'has_archive' => true, // включить архивные страницы
		'menu_icon' => get_stylesheet_directory_uri() .'/img/icon.png', // иконка в меню
		'menu_position' => 20, // порядок в меню
		'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail'), // включить заголовок, редактор, комментарии, автор, миниатюра записи
    'taxonomies'  => array( 'category' ) // поддержка рубрик
	);
	register_post_type('portfolio', $args);
 }

Но лучше сделать собственные рубрики отдельно от остальных, которые будут принадлежать только указанному пользовательскому типу записей. Для этого регистрируем новую таксономию с рубриками:

function wptp_register_taxonomy() {
  register_taxonomy( 'portfolio_category', 'portfolio',
    array(
      'labels' => array(
        'name'              => 'Рубрики',
        'singular_name'     => 'Рубрика',
        'search_items'      => 'Поиск рубрики',
        'all_items'         => 'Все рубрики',
        'edit_item'         => 'Изменить рубрику',
        'update_item'       => 'Обновить рубрику',
        'add_new_item'      => 'Добавить рубрику',
        'new_item_name'     => 'Имя рубрики',
        'menu_name'         => 'Рубрики',
        ),
      'hierarchical' => true,
      'sort' => true,
      'args' => array( 'orderby' => 'term_order' ),
      'show_admin_column' => true
      )
    );
}

И указываем ее при регистрации типа записей:

'taxonomies'  => array( 'portfolio_category' ),

Иконки для меню

Указать путь к иконке для меню можно в ключе menu_icon массива $args, либо воспользоваться плагином CPT Custom Icon, в котором можно выбрать из набора готовых иконок и применить изображение одним кликом. Особенно актуально это будет если у вас много различных пользовательских типов записей.

Плагин CPT Custom Icon

Подробнее о проекте Lemonad https://gembla.net/lemonad

Если вам понравилась статья, вы можете отблагодарить автора любой суммой, какую сочтете для себя приемлемой:
Остались вопросы по статье? Задайте их прямо сейчас!
Похожие записи
Правильный файл robots.txt для WordPress 2023

Самый оптимальный и простой код файла robots.txt для вашего сайта на WordPress, который подойдет для всех поисковиков. Этот вариант использую на данном сайте. Не забудьте заменить it-blog.ru на адрес вашего сайта. Если вы используете HTTPS, в директиве Host: нужно указать Читать далее

WPGrabber установка и настройка с примерами, скачать плагин бесплатно

WPGrabber это парсер для WordPress, с помощью которого можно скачать и сохранить записи с абсолютно любого доступного веб-сайта. Обычно его применяют для парсинга каталога товаров или новостей. Плагин может полностью автоматизировать добавление контента на сайт. Можно настроить его автоматический запуск Читать далее

Как создать интернет-магазин на WordPress

WooCommerce несомненно является лучшим бесплатным решением для создания интернет-магазина на WordPress. Кроме того, это одна из лучших платформ электронной коммерции с открытым исходным кодом. Цифры говорят сами за себя: более 4 миллионов установок, рейтинг 4.5 (на основе более чем 3000 Читать далее

Как установить WordPress: полное руководство для начинающих

Это полное пошаговое руководство для начинающих, которое поможет вам создать свой первый сайт на WordPress на любом веб-хостинге или локальном сервере. Почему WordPress? WordPress является самой популярной платформой для создания веб-сайтов. На сегодняшний день её используют 59% всех веб-сайтов созданных Читать далее

WordPress создание темы с нуля

Давно хотел написать подробное руководство о том, как создать тему на WordPress с нуля. Вам это пригодится: если вы хотите научиться разрабатывать сайты на WP, а не просто устанавливать шаблонные решения; вы хотите сделать уникальный дизайн для своего сайта или Читать далее

Как создать виджет WordPress

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

Оптимизация WordPress

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

2 комментария на «Произвольные типы записей WordPress»

  1. Дмитрий:

    Что-то не получается рубрики портфолио сделать отдельными от рубрик в записях. При указывании ‘taxonomies’ => array( ‘portfolio_category’ ) вместо ‘taxonomies’ => array( ‘category’ ) рубрики из портфолио вообще пропадают.

    Или новую таксономию с рубриками нужно указывать в другом месте?
    Что не так?

  2. Антон:

    Привязка указывается при регистрации таксономии. Можно попробовать убрать эту строчку из типа записи.

Добавить комментарий

*

code