Регистрация произвольного типа записи

custom-post-types
WordPress поставляется с пятью типами записей по-умолчанию (запись, страница, вложение, ревизия и пункт меню). При разработке вашего плагина, вы можете изменить их разными способами. Но могут быть случаи, когда вам нужно создать свой собственный специфический тип контента: например, товары для сайта электронной коммерции, задания для сайта онлайн обучения, или фильмы для сайта с обзорами.

Используя Произвольные Типы Записи (ПТЗ) вы можете создать свой ​​собственный тип записи.

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

Добавление произвольного типа записи

Чтобы создать новый тип записи, вы можете использовать register_post_type() функцию.

Пожалуйста, обратите внимание, что вы должны вызвать register_post_type() перед admin_menu и после after_setup_theme экшен хуков. Хорошим хуком, для использования в этом случае является init хук.

Это создает новый тип записи, Product, который идентифицируется в базе данных как acme_product.

Передаются такие основные аргументы:

  • labels определяет имя типа записи в его множественной и единственной форме
  • public определяет, будет ли отображаться новый тип записи на backend и frontend сайта
  • has_archive определяет, будет ли произвольный тип записи иметь отдельную страницу с архивом записей этого типа

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

В документации register_post_type есть список всех аргументов, которые могут быть переданы.

Присваивание имен — лучшие практики

Важно, что бы вы использовали префикс для идентификатора вашего типа записи в виде короткого имени, которое идентифицирует плагин, тему или веб-сайт, который использует произвольный тип записи.

Если ваш идентификатор слишком общий, как Product, например, он может конфликтовать с другими плагинами и темами.

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

Например, используйте такие варианты:

  • acme_product для сайта ACMEWidgets.com
  • eightfold_product или eft_product для темы EightFold
  • ai1m_product для продуктов в плагине All-in-One Merchant

Убедитесь, что ваш идентификатор произвольного типа записи не превышает двадцати символов, так как столбец post_type в базе данных в настоящее время VARCHAR поле этой длины.

Для обеспечения будущей совместимости, не используйте wp_ как ваш идентификатор, это может быть использовано в ядре WordPress в будущем.

URL-адреса

ПТЗ получает свой собственный ярлык в структуре URL сайта. В приведенном выше примере, запись этого ПТЗ product могут отображаться как http://example.com/acme_product/%product_name%, где acme_product является ярлыком вашего ПТЗ и %product_name% является ярлыком вашего конкретного продукта, поэтому постоянная ссылка может быть например http://example.com/product/foobrozinator. Постоянная ссылка появится на экране редактирования записи для вашего ПТЗ, как и с типами записей по-умолчанию.

URL-адреса имен идентификаторов ПТЗ

Когда вы задаете имя идентификатору ПТЗ и ​​хотите использовать чистую структуру URL, необходимо установить rewrite аргумент register_post_type() функции. Например, используя пример сверху Acme Widgets:

Это приведет адреса записей к виду http://example.com/products/%product_name%

Примечание: использование обычного ярлыка, как products может потенциально конфликтовать с другими плагинами и темами, которые используют тот же ярлык, но многие люди не любят длинные и более неясные URL-адреса как http://example.com/acme_products/foobrozinator Однако, решение конфликтов URL между двумя плагинами легче, потому что структура URL не хранится постоянно в ячейке базы данных для каждой записи, в отличии от способа хранения идентификаторов ПТЗ.

Навигация по разделам:

2 комментария

  1. Юрец

    Автор! Счастья, здоровья и успехов по жизни! Спасибо )

    Ответить

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *