Произвольные типы записей 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, который подойдет для всех поисковиков. Этот вариант использую на данном сайте. Не забудьте заменить maindot.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. Антон:

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

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