В этом посте поговорим о том как создать собственные типы постов, поговорим о тех типах, которые присутствуют в WordPress по умолчанию, а так же частые ошибки новичков.
По умолчанию в WordPress есть следующие типы постов: post, page, attachment, revision и menu.
Во время разработки вашего плагина вам может понадобиться создать собственный тип, например products (продукты), как в случае с каким-нибудь e-commerce (интернет-магазином). Это не единственный вариант, например это может пригодиться для создания системы обучения или создания платформы с отзывами.
После того как вы зарегистрировали новый тип поста, он автоматически попадает на экран администратора и теперь вы можете создавать новые посты используя новый тип.
Для создания новых типов вы можете воспользоваться функцией register_post_type().
Я рекомендую добавлять новые типы постов в плагине, а не в теме. Таким образом пользователь может использовать собственный тип поста в других темах.
Следующий пример регистрирует новый тип поста, «Продукт», который в базе данных будет обозначаться как bologer_product
.
function bologer_custom_post_type() { register_post_type('bologer_product', [ 'labels' => [ 'name' => __('Продукты'), 'singular_name' => __('Продукт'), ], 'public' => true, 'has_archive' => true, ] ); } add_action('init', 'bologer_custom_post_type');
Официальная документация — register_post_type(), чтобы получить подробную информацию о передаваемых параметрах в функцию.
Вам обязательно нужно вызывать
register_post_type()
доadmin_init
и послеafter_setup_theme
. Хороший вариантом в таком случае будет —init
.
Как придумывать имена
Важным этапом в создании функции — это её имя, помните о префикса, чтобы избежать стычек с другими, уже существующими плагинами. Лучшим вариантом префикса может быть краткое название плагина, шаблона или сайта.
Не используйте префикс
wp_
, так как это используется функциями ядра WordPress.Так же помните, чтобы собственный тип поста не превышать 20 символов, так как колонка
post_type
в базе, на данный момент VARCHAR именно с такой длинной.И если ваш тип поста слишком обобщенный, например
products
, то это может конфликтовать с другими плагинами или темами.
Ссылки
Собственный тип поста получает собственную ссылку. Пост типа bologer_product
, будет иметь следующую ссылку: http://example.com/bologer_product/%product_name%
.
bologer_product
— это название вашего типа, а %product_name%
— это название конкретного продукта.
Финальный формат ссылку может выглядеть следующим образом: http://example.com/bologer_product/kakoe-to-nazvanie-tovara.
Вы можете видеть ссылку на экране редактирования точно так же как вы это делаете на стандартных типах.
Собственная ссылка для собственного типа поста
Чтобы добавить собственный тип, вам нужно добавить его в rewrite
параметра функции register_post_type(), как это сделано в примере ниже:
function bologer_custom_post_type() { register_post_type('bologer_product', [ 'labels' => [ 'name' => __('Продукты'), 'singular_name' => __('Продукт'), ], 'public' => true, 'has_archive' => true, 'rewrite' => ['slug' => 'products'], // мой собственный тип ] ); } add_action('init', 'bologer_custom_post_type');
Пример выше сделает нам следующую страктуру ссылки: http://example.com/products/%product_name%