Тип записи должен создаваться в момент хука-события init. Он не будет создан, если прикрепить функцию до init и может работать неправильно, если использовать после.
В качестве названия для нового типа записи нужно указывать уникальное имя, отличное от уже имеющихся таксономий, типов записей и зарезервированных WordPress публичных и частных переменных.
С версии 4.6 был создан новый класс WP_Post_Type и весь код функции теперь обрабатывается этим классом, а эта функция стала оберткой для него.
Важно: после создания нового типа записи. Обязательно нужно зайти на страницу Настройки → Постоянные ссылки
. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи.
Если для нового типа записи регистрируется таксономия, то всегда регистрируйте эту таксономию при регистрации типа записи, для этого используя параметр taxonomies
. Если вы этого не сделаете, тип поста и таксономии не будут опознаны как связанные при срабатывании хуков, таких как: parse_query
или pre_get_posts
. Это может привести к неожиданным последствиям и ошибкам.
Таксономии нужно регистрировать отдельно. Несмотря на то, что таксономия указывается при регистрации типа записи, регистрировать саму таксономию нужно отдельно с помощью register_taxonomy().
Сначала нужно регистрировать таксономию, а потом тип записи с которым эта таксономия связана!
// правильный порядок регистрации типа записи и её таксономии register_taxonomy( ... ); register_post_type( ... );
add_action( 'init', 'register_post_types' ); function register_post_types(){ register_post_type( 'post_type_name', [ 'label' => null, 'labels' => [ 'name' => '____', // основное название для типа записи 'singular_name' => '____', // название для одной записи этого типа 'add_new' => 'Добавить ____', // для добавления новой записи 'add_new_item' => 'Добавление ____', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование ____', // для редактирования типа записи 'new_item' => 'Новое ____', // текст новой записи 'view_item' => 'Смотреть ____', // для просмотра записи этого типа. 'search_items' => 'Искать ____', // для поиска по этим типам записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'parent_item_colon' => '', // для родителей (у древовидных типов) 'menu_name' => '____', // название меню ], 'description' => '', 'public' => true, 'publicly_queryable' => true, // зависит от 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' => true, // добавить в REST API. C WP 4.7 'rest_base' => null, // $post_type. C WP 4.7 'menu_position' => null, 'menu_icon' => 'dashicons-open-folder', //'capability_type' => 'post', //'capabilities' => 'post', // массив дополнительных прав для этого типа записи //'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав 'hierarchical' => false, 'supports' => [ 'title', 'editor', 'thumbnail','page-attributes','post-formats' ], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats' 'taxonomies' => array( 'category', 'post_tag' ), 'has_archive' => false, 'rewrite' => true, 'query_var' => true, ] ); }
// Здесь мы добавляем таксономии в наш CPT
'taxonomies' => array( 'category', 'post_tag' ),
Включить Gutenberg для кастомных типов записей
'show_in_rest' => true, // добавить в REST API