Skip to main content

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

Произвольные типы записей 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 — поддержка различного функционала, можно например включить поддержку комментирования и миниатюр. В данном примере включается заголовок, редактор, комментарии, автор и миниатюры записей

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

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

Для возможности создания рубрик необходимо добавить в массив $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
Похожие записи
Как создать виджет WordPress

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

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

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

Отправка сообщений в Telegram из Contact Form 7

Мы уже рассматривали как отправлять сообщения в телеграмм из обычного PHP скрипта и заказы из... Читать далее

Получить параметры сайта с помощью функции get_bloginfo() WordPress

Сегодня мы поговорим об одной нужной функции WordPress get_bloginfo(), которая возвращает параметры сайта и довольно... Читать далее

Что такое шорткод и как его использовать

Шорткоды - это PHP функции, которые можно вставлять в текст записи, страницы или другой таксономии... Читать далее

Contact Form 7 reCAPTCHA. Установка и настройка

Защитить от спама свои контактные формы на сайте WordPress, созданные в плагине Contact Form 7... Читать далее

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

*

code