Полное руководство по пользовательским типам записей WordPress

Опубликовано: 2024-03-26

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

Пользовательские типы сообщений (CPT), улучшенные в основном в версии WordPress 3 в 2010 году, используются многими способами. Я уверен, что вы встречали их, не зная об этом. Позвольте мне дать вам обзор CPT, конкретные примеры того, как я их использовал с течением времени, как их настроить самостоятельно и как добиться еще большего с помощью соответствующих плагинов.

Что такое пользовательские типы сообщений?

Ядро WordPress поставляется с различными типами записей. Наиболее очевидными являются публикации, страницы и вложения.

В WordPress 6.4 их ещё четыре:

  • Редакции
  • Навигационные меню
  • Шаблоны блоков
  • Части шаблона

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

Как можно предположить, типы сообщений не всегда очевидны и не обязательно являются чем-то видимым во внешнем интерфейсе, что мы бы назвали «контентом». Это скорее группа связанных элементов в базе данных.

Вы можете добавить больше таких «вещей», которые затем будут называться «Пользовательскими» типами сообщений.

Это не официальный термин WordPress, но мне нравится фраза «Пользовательские типы контента» для любого видимого пользовательского типа сообщения. Позже я приведу несколько примеров.

Зачем использовать собственный тип сообщения?

WP Mayor с течением времени использовал несколько пользовательских типов публикаций, например «Пожизненные предложения», которые вы можете увидеть прямо сейчас.

Я лично использовал пользовательские типы сообщений для многих целей.

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

Давайте представим, что у WP Mayor также будет специальный тип публикации «Новости». Просто зарегистрировав этот пользовательский тип сообщения, вы получите следующие преимущества:

  • Отдельный пункт «Новости» в меню WP Admin.
  • Возможность предоставить пользователям и ролям пользователей различные возможности для этого типа.
  • Имейте разные шаблоны для отображения отдельных новостей во внешнем интерфейсе.
  • Отдельный архив и лента новостей.
  • Дополнительные метаданные публикации хранятся и отображаются только для новостей.

Я также использовал пользовательские типы сообщений для элементов контента в различных плагинах. Однажды я создал платформу бронирования домов для отдыха, где дома, бронирования и платежи представляли собой отдельный тип сообщений с уникальными атрибутами. То же самое делают и большинство плагинов электронной коммерции для WordPress.

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

Наконец, плагин Advanced Ads, который я изначально разработал, использовал CPT для хранения рекламного контента.

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

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

Создание пользовательского типа сообщения

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

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

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

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

Решения для пользовательских типов сообщений

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

Публичный или нет?

Основное решение относительно пользовательских типов сообщений — кто должен их видеть и взаимодействовать с ними. С помощью вашего собственного кода или плагина вы можете выбрать, будет ли CPT отображаться во внешнем интерфейсе, включая архивы и отдельные страницы, доступные напрямую, и будут ли пользователи находить его через поиск. Должен ли он появиться на серверной части вашего сайта WordPress вместе со своим пунктом меню?

Хотя CPT «Новости», вероятно, полностью виден во внешнем интерфейсе, внутренний журнал или что-то вроде платежей может быть доступно только пользователям с определенной ролью в вашем серверном интерфейсе WordPress.

Иерархический

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

Последняя называется «иерархией», которая также определяется при создании собственного типа записи.

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

Раздел атрибутов страницы в редакторе WordPress, показывающий параметры иерархии страниц.
Параметры иерархии при редактировании страницы.

Порядок и родительская страница могут иметь значение при автоматическом создании меню или списков из страниц. Иерархия также видна в URL-фрагменте. Если бы моя страница была «Устранение неполадок» с «Документацией» в качестве родительской, конечный URL мог бы быть documentation/troubleshooting .

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

Блочный или классический редактор

При создании пользовательского типа сообщения вас спросят, показывать его в «REST API» или нет. Этот технический термин выполняет одну важную функцию: он определяет, использует ли ваш CPT редактор блоков или классический вид редактора.

Как правило, использование редактора блоков имеет смысл, если тип вашего сообщения похож на обычный контент и вы хотите использовать блоки WordPress. Любой пользовательский тип сообщения, для контента которого не требуется большая часть экрана, должен выбирать классический редактор. Следовательно, его не следует доставлять через REST API.

URL-адреса и структура

Еще одно важное решение, которое вам необходимо принять, — это назвать пулю CPT. Наш тип публикации «Новости» может упоминаться как news в URL-адресе, но если у вас более причудливые внутренние имена, вы можете выбрать короткую форму для URL-адресов внешнего интерфейса.

Это может быть важным решением для вашего SEO, поэтому подумайте об этом несколько минут.

Поддерживаемые элементы

В зависимости от типа сообщения, которое вы создаете, вы также можете заранее решить, включать ли поддержку следующих элементов:

  • Заголовки (включено по умолчанию)
  • Отображение редактора (включено по умолчанию)
  • Комментарии
  • Редакции
  • Авторы
  • Выдержки
  • Миниатюры

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

Создайте собственный тип сообщения с помощью плагина

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

Я выбираю один из самых популярных бесплатных вариантов с wordpress.org: пользовательский интерфейс пользовательского типа сообщений (CPTUI) от WebDevStudios.

Их интерфейс довольно прост, со всеми опциями, которые можно ожидать от плагина Custom Post Types. Тем не менее, это также дает понять, что пользовательские типы сообщений по-прежнему являются абстрактной концепцией, которую нужно понять, а не функцией, с которой обычному издателю WordPress следует возиться без более глубоких знаний опций.

Первый экран с опциями при создании нового пользовательского типа записи WordPress с использованием плагина пользовательского интерфейса пользовательского типа записи.
Создание нового CPT с помощью плагина пользовательского интерфейса Custom Post Type.

Совет: я лично консервативен в отношении «публичных» опций для моих CPT и максимально ограничиваю их в отношении того, кто должен видеть их во внешнем интерфейсе и кто должен иметь возможность изменять их во внутреннем интерфейсе. При необходимости вы всегда можете предоставить дополнительный доступ позже.

Преимущества пользовательского интерфейса типа записи

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

Обычно я создаю CPT вручную, поэтому знаю, что написание меток занимает много времени. Их около трех дюжин, если вы хотите настроить их все так, чтобы упоминалось имя вашего CPT. Как вы можете видеть на скриншоте выше, плагин пользовательского интерфейса Custom Post Type имеет возможность автоматически заполнять эти метки. Вы все равно можете настроить их позже в интерфейсе.

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

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

Обзор пользовательских типов сообщений WordPress, созданных с помощью плагина пользовательского интерфейса пользовательского типа сообщений.
Указан пользовательский тип сообщения.

Эти шаблоны являются частью волшебства пользовательских типов сообщений WordPress. Если бы наш News CPT использовал фрагмент news , то WordPress автоматически искал бы в вашей теме файл с именем archive-news.php , чтобы отобразить страницу архива этого типа сообщения или single-news.php для одной страницы новостей. Дополнительную информацию см. в разделе «Иерархия шаблонов».

Генерация кода с помощью CPTUI

Функция, которая в конечном итоге заставила меня порекомендовать пользовательский интерфейс пользовательского типа сообщения, — это инструмент для экспорта CPT в код PHP . В разделе «Пользовательский интерфейс CPT» > «Инструменты» > «Получить код» вы найдете код PHP для использования в вашем плагине или functions.php . Спасибо разработчикам плагина за то, что они не блокируют людей.

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

Единственный вариант, который я не смог найти в плагине, — это удалить пользовательский тип сообщения со всеми его объектами. Как правило, если вы удалите плагин или код, пользовательские сообщения останутся в базе данных. Однако существуют специальные плагины для этой очистки.

Использование кода

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

Основной функцией регистрации нового пользовательского типа сообщения является функция Register_post_type. Его параметры позволяют установить все параметры, о которых я упоминал выше.

Все типы сообщений хранятся в таблице wp_posts вашей базы данных. Поле post_type определяет, к какой записи принадлежит тип сообщения.

Вы можете использовать метаданные публикации, если ваш пользовательский тип публикации касается не только контента. Эти данные хранятся в wp_postmeta .

Кстати, некоторые плагины используют собственные таблицы для управления типами контента. Не идите по этому пути, если вам это действительно не нужно, поскольку вы не сможете использовать все встроенные функции WordPress, которые входят в состав API пользовательских типов сообщений.

Расширение пользовательских типов сообщений

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

Пользовательские поля и мета-поля

Более продвинутые CPT, такие как события или товары в магазине, требуют большего, чем просто контент. Здесь в игру вступают настраиваемые поля. Они предлагают поля ввода для различных способов структурирования ваших данных. Например, для типа публикации «Событие» могут потребоваться дата начала и окончания или место проведения, чтобы события можно было отображать и фильтровать.

Хотя вы можете добавлять настраиваемые поля и мета-поля с помощью собственного кода, отличным плагином для этого является очень известный Advanced Custom Fields. У него так много опций и он настолько хорошо поддерживается, что даже я, как разработчик, не стал бы кодировать настраиваемые поля на своих сайтах.

Пользовательские таксономии

Поскольку тип сообщений по умолчанию «Сообщения» можно упорядочить с помощью «Категорий» и «Тегов», вы также можете зарегистрировать таксономии для своего пользовательского типа сообщений.

Плагин Custom Post Type UI, который я рекомендовал выше, также поможет вам их создать.

Управление возможностями

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

Переключение типов сообщений

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

Хотя я бы не рекомендовал делать это легкомысленно с общедоступными типами сообщений, нет проблем сделать это на закрытом сайте с похожими типами сообщений. Для этого я установил Post Type Switcher, отличный плагин, который позволяет вам делать это без суеты. После установки плагин добавит раздел «Тип сообщения» на экране «Редактировать сообщение». Вы можете использовать этот интерфейс для изменения типов сообщений по мере необходимости.

Заключение

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

При создании плагинов, используемых на многих веб-сайтах, я все еще сталкиваюсь с кодом для создания новых типов сообщений. Но при создании сайтов для себя и клиентов я использую плагины. Они упрощают создание и изменение пользовательских типов сообщений и имеют гораздо лучший пользовательский интерфейс, чем я когда-либо мог создать.