register_post_type() — позволяет зарегистрировать новый тип поста

В случае успеха функция возвращает объект зарегистрированного типа поста, в случае неудачи — объект WP_Error. Функция должна использоваться только внутри хука init.

Читайте подробнее о том, что такое типы записей (типы постов).

register_post_type( $post_type, $args = array() )
$post_type
(строка) то, как вы хотите назвать свой тип поста, это название в дальнейшем будет использоваться в параметрах многих функций, учтите это. Кроме того, нельзя использовать в качестве названий следующие зарезервированные вордпрессом слова:

  • post
  • page
  • attachment
  • revision
  • nav_menu_item
  • action
  • order
  • theme
$args
(массив) включает в себя следующие параметры:

labels
(массив) позволяет подписать элементы интерфейса данного типа записи. Подробнее в примере в конце поста.
description
(строка) описание регистрируемого типа записей. Насколько мне известно, этот параметр не используется где-либо в движке WordPress или в стандартных плагинах и темах. Но вполне может использоваться в сторонних плагинах или темах.
public
(логическое) обобщает следующие несколько параметров, устанавливая для них соответствующие значения по умолчанию
publicly_queryable
(логическое) нужно ли элементы данного типа записей сделать доступными на сайте. Подробнее про задачу этого параметра тут.
По умолчанию: значение аргумента public.
exclude_from_search
(логическое)

  • true — исключить записи данного типа из результатов поиска на сайте,
  • false — не исключать.

По умолчанию: противоположные значения параметра public.

show_in_nav_menus
(логическое) нужно ли элементы данного типа записей сделать доступными для добавления в меню сайта.
По умолчанию: значение аргумента public.
show_ui
(логическое) нужно ли добавлять стандартный интерфейс в админке для редактирования и добавления записей данного типа.
По умолчанию: значение аргумента public.

значение параметра show_ui равно true
show_in_menu
(логическое|строка) нужно ли добавлять пункты в меню админки.

  • true — пункты в меню будут добавлены (это видно на предыдущем скриншоте),
  • false — хоть интерфейс для типов постов и будет доступен по прямой ссылке в админке, в меню он не появится,
  • ссылку на страницу управления нашим типом поста мы можем добавить как вложенную для другого элемента меню верхнего уровня — для этого нужно будет указать его ID (являющийся атрибут href нужной нам ссылки), например tools.php или edit.php?post_type=page;
    show_in_menu - в качестве значения параметра указано edit.php

По умолчанию: значение аргумента show_ui.

show_in_admin_bar
(логическое) нужно ли добавлять ссылку на создание новой записи данного типа в админ панель.

параметр show_in_admin_bar равен true

По умолчанию: значение аргумента show_in_menu.

menu_position
(целое число) порядок расположения в меню в админке.

Значения параметров Расположение
1 в самом верху меню
2-3 под «Консоль»
4-9 под «Записи»
10-14 под «Медиафайлы»
15-19 под «Ссылки»
20-24 под «Страницы»
25-59 под «Комментарии» (по умолчанию, null)
60-64 под «Внешний вид»
65-69 под «Плагины»
70-74 под «Пользователи»
75-79 под «Инструменты»
80-99 под «Параметры»
больше 100 под разделителем после «Параметры»
menu_icon
(строка) абсолютный URL иконки для меню. Оптимальное разрешение изображения 16×16 пикселей.

Кроме того, в WordPress 3.8 появился встроенный пакет иконок Dashicons — вы можете использовать любую из этих иконок, просто указав её название в качестве значения параметра, например dashicons-cart.

иконка в меню для произвольного типа записей

По умолчанию используется иконка обычных записей.

delete_with_user
(логическое) при удалении пользователя на блоге, нужно ли автоматически удалять все записи данного типа, которые он опубликовал.
По умолчанию: false.
hierarchical
(логическое) должен ли данный тип постов иметь иерархию.
По умолчанию: false.
has_archive
(логическое|строка) должен ли данный тип постов иметь собственную страницу архивов. В качестве значения параметра можно указать ярлык страницы архивов.
По умолчанию: false.
rewrite
(массив|логическое) устанавливает правила для постоянных ссылок в URL. Если в качестве значения данного параметра указать false, то правила для постоянных ссылок создаваться не будут.

slug
(строка) ярлык, используемый для записей данного типа (по умолчанию — название типа поста)
with_front
(логическое) нужно ли добавлять в постоянные ссылки значение $wp_rewite->front (по умолчанию — true)
feeds
(логическое) нужно ли создавать RSS ленту для данного типа поста (по умолчанию — значение параметра has_archive)
pages
(логическое) нужно ли разрешить постраничную навигацию в постах регистрируемого типа, используя тег <!--nextpage--> (по умолчанию — true)
supports
(массив) какие метабоксы нужно добавить на страницы редактирования записей данного типа.

  • title — поле для ввода заголовка поста
  • editor — текстовый редактор
  • excerpt — метабокс «Цитата»
  • author — метабокс «Автор»
  • thumbnail — метабокс «Миниатюра записи» (кроме того, ваша тема должна их поддерживать)
  • comments — метабокс «Комментарии» (если указано, то разрешены комментарии к постам регистрируемого типа)
  • trackbacks — метабокс «Отправить обратные ссылки»
  • custom-fields — метабокс «Произвольные поля» (произвольные поля будут поддерживаться в любом случае)
  • revisions — метабокс «Редакции» (если указано, то в базе данных будут создаваться редакции постов данного типа)
  • page-attributes — метабокс «Атрибуты страницы» с возможностью выбора родительского эоемента и установления порядка menu_order
  • post-formats — метабокс «Формат», про форматы постов читайте подробнее здесь.
taxonomies
(массив) массив зарегистрированных таксономий, например category или post_tag, которые будут использоваться для данного типа записей. Присвоить таксономии можно также при помощи функции register_taxonomy_for_object_type().

Пример регистрации типа поста

Если не знаете, куда вставлять код — вставляйте в functions.php вашей текущей темы.

add_action( 'init', 'true_register_products' ); // Использовать функцию только внутри хука init
 
function true_register_products() {
	$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, // благодаря этому некоторые параметры можно пропустить
		'menu_icon' => 'dashicons-cart', // иконка корзины
		'menu_position' => 5,
		'has_archive' => true,
		'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments'),
		'taxonomies' => array('post_tag')
	);
	register_post_type('product',$args);
}
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.