maksimerohin
12/27/2019 - 11:26 PM

Register Custom Post Types & Taxonomies

https://wp-kama.ru/function/register_post_type

Тип записи должен создаваться в момент хука-события init. Он не будет создан, если прикрепить функцию до init и может работать неправильно, если использовать после.

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

Важно: после создания нового типа записи. Обязательно нужно зайти на страницу Настройки → Постоянные ссылки. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи.

/**
 * Регистрирует тип записей
 *
 */
function register_post_types(){
	register_post_type('post_type_name', array(
		'label'  => null,
		'labels' => array(
      'name'                     => '', // основное название для типа записи, обычно во множественном числе.
      'singular_name'            => '', // название для одной записи этого типа.
      'add_new'                  => '', // текст для добавления новой записи, как "добавить новый" у постов в админ-панели.
      									                // Если нужно использовать перевод названия, вписывайте подобным образом: _x('Add New', 'product');
      'add_new_item'             => '', // текст заголовка у вновь создаваемой записи в админ-панели. Как "Добавить новый пост" у постов.
      'edit_item'                => '', // текст для редактирования типа записи. По умолчанию: редактировать пост/редактировать страницу.
      'new_item'                 => '', // текст новой записи. По умолчанию: "Новый пост"
      'view_item'                => '', // текст для просмотра записи этого типа. По умолчанию: "Посмотреть пост"/"Посмотреть страницу".
      'search_items'             => '', // текст для поиска по этим типам записи. По умолчанию "Найти пост"/"найти страницу".
      'not_found'                => '', // текст, если в результате поиска ничего не было найдено.
      									                // По умолчанию: "Постов не было найдено"/"Страниц не было найдено".
      'not_found_in_trash'       => '', // текст, если не было найдено в корзине. По умолчанию "Постов не было найдено в корзине"/"Страниц
      								                  // не было найдено в корзине".
      'parent_item_colon'        => '', // текст для родительских типов. Этот параметр не используется для не древовидных типов записей.
      									                // По умолчанию "Родительская страница".
      'all_items'                => '', // Все записи. По умолчанию равен menu_name
      'archives'                 => '', // Архивы записей. По умолчанию равен all_items
      'insert_into_item'         => '', // Вставить в запись
      'uploaded_to_this_item'    => '', // Загружено для этой записи
      'featured_image'           => '', // Миниатюра записи
      'set_featured_image'       => '', // Установить миниатюру записи
      'remove_featured_image'    => '', // Удалить миниатюру записи
      'use_featured_image'       => '', // Использовать как миниатюру записи
      'filter_items_list'        => '', // Фильтровать список записей
      'items_list_navigation'    => '', // Навигация по записям
      'items_list'               => '', // Список записей
      'menu_name'                => '', // Название меню. По умолчанию равен name.
      'name_admin_bar'           => '', // Название в админ баре (тулбаре). По умолчанию равен singular_name.
      'view_items'               => '', // Название в тулбаре, для страницы архива типа записей. По умолчанию: «View Posts» / «View Pages». С WP 4.7.
      'attributes'               => '', // Название для метабокса атрибутов записи (у страниц это метабокс «Свойства страницы» - «Page Attributes»).
    									                  // По умолчанию: «Post Attributes» или «Page Attributes». С WP 4.7.
      'item_updated'             => '', // Текст заметки в редакторе записи при обновлении записи. С WP 5.0.
      									                // По умолчанию: «Post updated.» / «Page updated.»
      'item_published'           => '', // Текст заметки в редакторе записи при публикации записи. С WP 5.0.
    									                  // По умолчанию: «Post published.» / «Page published.»
      'item_published_privately' => '', // Текст заметки в редакторе записи при публикации private записи. С WP 5.0.
      									                // По умолчанию: «Post published privately.» / «Page published
      'item_reverted_to_draft'   => '', // Текст заметки в редакторе записи при возврате записи в draft. С WP 5.0.
    									                  // По умолчанию: «Post reverted to draft.» / «Page reverted to
      'item_scheduled'           => '', // Текст заметки в редакторе записи при запланированной публикации на будущую дату. С WP 5.0.
      									                // По умолчанию: «Post scheduled.» / «Page scheduled.»
		),
		'description'         => '',
		'public'              => true,
		// 'publicly_queryable'  => null, // зависит от public
		// 'exclude_from_search' => null, // зависит от public
		// 'show_ui'             => null, // зависит от public
		// 'show_in_nav_menus'   => null, // зависит от public
		'show_in_menu'        => null, // показывать ли в меню адмнки
		// 'show_in_admin_bar'   => null, // зависит от show_in_menu
		'show_in_rest'        => null, // добавить в REST API. C WP 4.7
		'rest_base'           => null, // $post_type. C WP 4.7
		'menu_position'       => null,
		'menu_icon'           => null, 
		//'capability_type'   => 'post',
		//'capabilities'      => 'post', // массив дополнительных прав для этого типа записи
		//'map_meta_cap'      => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
		'hierarchical'        => false,
		'supports'            => [ 'title', 'editor' ], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
		'taxonomies'          => [],
		'has_archive'         => false,
		'rewrite'             => true,
		'query_var'           => true,
	) );
}

add_action( 'init', 'register_post_types' );


/**
 * Меняет плейсхолдер заголовка записи
 *
 * @param $text
 * @param $post
 *
 * @return string
 *
 */
function answer_enter_title_here( $text, $post ) {
	if ( $post->post_type === 'answer' ) {
		$text = 'Введите вопрос';
	}

	return $text;
}

add_filter( 'enter_title_here', 'answer_enter_title_here', 10, 2 );
/**
 * Регистирует таксономию
 *
 */
function create_taxonomy(){

	register_taxonomy( 'taxonomy', [ 'post' ], [ 
		'label'                 => '', // определяется параметром $labels->name
		'labels'                => [
			'name'              => 'Genres',
			'singular_name'     => 'Genre',
			'search_items'      => 'Search Genres',
			'all_items'         => 'All Genres',
			'view_item '        => 'View Genre',
			'parent_item'       => 'Parent Genre',
			'parent_item_colon' => 'Parent Genre:',
			'edit_item'         => 'Edit Genre',
			'update_item'       => 'Update Genre',
			'add_new_item'      => 'Add New Genre',
			'new_item_name'     => 'New Genre Name',
			'menu_name'         => 'Genre',
		],
		'description'           => '', // описание таксономии
		'public'                => true,
		// 'publicly_queryable'    => null, // равен аргументу public
		// 'show_in_nav_menus'     => true, // равен аргументу public
		// 'show_ui'               => true, // равен аргументу public
		// 'show_in_menu'          => true, // равен аргументу show_ui
		// 'show_tagcloud'         => true, // равен аргументу show_ui
		// 'show_in_quick_edit'    => null, // равен аргументу show_ui
		'hierarchical'          => false,
		'rewrite'               => true,
		//'query_var'             => $taxonomy, // название параметра запроса
		'capabilities'          => array(),
		'meta_box_cb'           => null, // html метабокса. callback: `post_categories_meta_box` или `post_tags_meta_box`. false — метабокс отключен.
		'show_admin_column'     => false, // авто-создание колонки таксы в таблице ассоциированного типа записи. (с версии 3.5)
		'show_in_rest'          => null, // добавить в REST API
		'rest_base'             => null, // $taxonomy
		// '_builtin'              => false,
		//'update_count_callback' => '_update_post_term_count',
	] );
}

add_action( 'init', 'create_taxonomy' );