WordPress: регистрируем собственные форматы постов

WordPress: регистрируем собственные типы постов

В этом посте поговорим о том как создать собственные типы постов, поговорим о тех типах, которые присутствуют в 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%