Произвольные типы записей 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

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

В повседневной работе часто приходится сталкиваться с переносом сайта на Wordpress с локального или тестового домена на основной. Для этого необходимо не только скопировать файлы, базу данных и поменять настройки в конфигурационном файле, но и сделать ряд SQL-запросов, чтобы прописать Читать далее

Правильный файл robots.txt для WordPress 2019

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

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

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

Произвольные поля WordPress

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

Создание плагина WordPress с нуля

Когда я создавал свой первый плагин, то оказалось, что в сети очень мало информации по этому вопросу. С трудом удалось найти даже основы. Надеюсь эта статья поможет вам научиться писать различные плагины для WordPress. Наверняка вы уже пользовались и знаете, Читать далее

WordPress Ajax

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

WordPress подгрузка постов кнопкой показать еще или бесконечным скроллом

Кнопка "Показать ещё" и бесконечный скроллинг - это по сути постраничная навигация, которая подгружает следующую страницу с постами без перезагрузки страницы. Подобные примеры часто можно встретить в лентах соц. сетей. В этом примере показана реализация кнопки "Показать ещё" и бесконечного Читать далее

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

  1. Дмитрий:

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

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

  2. Антон:

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

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