Контентное моделирование: один из самых недооцененных путей по созданию успешного WordPress-сайта

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

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

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

wp_content_model-700x262

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

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

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

Ответ здесь следующий: нужно использовать корректную модель вашего контента.

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

Почему вам нужна контентная модель

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

Дизайн

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

Также нам могут помочь и отношения (relationships). Если мы видим, что события связаны с одним или несколькими экспертами, то мы знаем, что нам требуется – список экспертов – при проектировании разметки для шаблона события.

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

Создание контента

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

Разработка

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

К примеру, у нас в блоге имеется тип контента Review (обзор), который автоматически вычисляет средний рейтинг для какого-либо элемента на базе отдельных оценочных критериев. Это, конечно, достаточно простой пример; вы можете взглянуть на различные плагины для электронной коммерции, чтобы увидеть, что их функциональность может быть очень и очень сложной — как во фронтэнде, так и в бэкэнде.

Управление

Полностью определенная контентная модель также может оказать мощное положительное влияние на управление вашим сайтом:

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

Что такое контентная модель?

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

Это не физическое описание – на данном этапе мы действительно не интересуемся тем, как реализовать это в WordPress, мы просто хотим идентифицировать различные типы контента и их отношения.

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

example-model

Как вы видите, есть три объекта – event (событие), expert(эксперт) и expertise (квалификация). Здесь имеется два отношения: many-to-many (многие ко многим), которое существует между экспертами и событиями (события могут иметь несколько экспертов, а эксперты могут обслуживать несколько событий); one-to-many (один ко многим), которое существует между экспертами и квалификацией (эксперты могут обладать многочисленными навыками и знаниями).

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

Создание собственной контентной модели

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

  • Отбросьте в сторону любые мысли о том, как именно вы будете реализовывать вашу контентную модель в WordPress. В данный момент вы находитесь в режиме «полета» и не должны быть слишком обеспокоены физической реализацией.
  • Вы не должны беспокоиться о том, как управлять отношениями между типами контента, просто убедитесь в том, что они существуют.
  • Когда у вас будут типы контента, добавьте их атрибуты (поля). Постарайтесь охватить всевозможные аспекты, поскольку это поможет упростить реализацию, если вы знаете точно, какие атрибуты вам понадобятся.
  • Сохраните встроенные типы контента (записи и страницы) для новостей. Если у вас нет потребности в новостях, то не используйте эти типы контента.

Как рационализировать свои типы контента

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

  1. Нуждается ли тип контента в своей собственной разметке и своем дизайне?
  2. Имеет ли тип контента уникальный функционал (поток операций, права доступа, управление)?
  3. Имеет ли тип контента уникальные дополнительные атрибуты (произвольные поля)?

Перенос вашей модели под WordPress

Теперь самая интересная часть!

Перед тем, как начать, очень важно отметить, что WordPress построена на базе блоговой модели (записи, рубрики, метки), дополненной страницами, которые не могут быть расширены без использования произвольного кода или плагинов, в отличие от более свежих систем управления контентом – в них контентное моделирование уже заложено.

В действительности мы просто расширим модель WordPress вместо того, чтобы создавать новую модель. Наши типы контента станут произвольными типами записей; атрибуты, выходящие за пределы стандартных записей, станут произвольными полями; рубрики (и метки) станут таксономиями.

Чтобы наши эксперты могли указывать многочисленные навыки, мы будем использовать обычные метки (неиерархическая таксономия, поскольку термы никак не структурированы).

Свою креативность нам понадобится проявить в моделировании отношений. One-to-one (один к одному) и one-to-many (один ко многим) отношения формируются либо путем родительского id записи (обычно используются страницами), либо через использование таксономии (рубрик или меток), однако нет никакой встроенной поддержки отношений many-to-many (многие ко многим).

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

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

Добиться этого в WordPress можно следующим образом. Мы можем использовать метки событий как для экспертов, так и для самих событий. Таким образом, если событие 1 помечено как event1, а событие 2 – как event2, то в таком случае добавление метки event1 к expert1 и expert2 создаст отношения между экспертами и событиями. Добавление дополнительных меток к экспертам (к примеру, event2) создаст отношения с другими событиями.

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

Понимание иерархии шаблонов WordPress

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

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

  • archive-{название произвольного типа записей}, к примеру, archive-event.php, для вывода списка событий
  • taxonomy-{название произвольной таксономии}-{название терма}.php, к примеру, taxonomy-eventexpert-event1.php для вывода списка всех экспертов, помеченных как event1
  • single-{название произвольного типа записей}.php, к примеру, single-event.php для вывода отдельного события.

template-hierarchy

Плагины для реализации вашей модели

В то время как вы можете создать свою модель, используя код (generatewp.com может оказать вам прекрасную помощь), гораздо проще применить для этого плагин, несущий в себе функциональность, в которой вы нуждаетесь, обернутую в удобный пользовательский интерфейс.

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

CustomPress

custompress

Неудивительно, что я обычно использую плагин CustomPress от WPMU DEV. С его помощью можно создавать произвольные типы записей, произвольные поля (плагин позволяет вам выбирать, для каких произвольных типов записей должны выводиться поля), а также таксономии.

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

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

Pods – фреймворк для разработки контента

pods

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

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

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

Если же этого недостаточно, Pods позволяет вам расширять пользователей, комментарии и медиа, а также имеет массу дополнений для реализации продвинутой функциональности.

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

Types

types

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

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

Сила Types увеличивается при использовании плагина в платном пакете, который также предлагает Views  для вывода произвольного контента, CRED для формирования возможности фронтэнд редактирования, а также Access для доступа к контенту на базе прав.

WP Ultimate CSV Importer

ultimate-csv

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

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

Премиум-версия позволяет также проверить заполнение произвольных таксономий.

Источник: http://premium.wpmudev.org/blog

Блог про WordPress
Комментарии: 4
  1. AlexD

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

    Проще все это прописать (зарегистривать) в function.php, чем зависить от плагинов.

    1. Дмитрий (автор)

      Безусловно, про контентные модели есть более продвинутые статьи, но эта, как мне показалась, самая простая из всех.

      Раздувать functions.php не всегда актуально. Порой плагины помогают решить проблему гораздо легче и быстрее. К тому же зависимость от плагинов — это не зависимость от темы. Зависимость от темы в этом вопросе — гораздо более значимая проблема.

  2. AlexD

    А есть ссылки на продвинуты статьи про типы записей и т.п? Хотелось бы почитать вечерком.

    Да, плагины, не шаблон, но все же. Недавно читал вашу тему про вставки шоткодов в шаблон это OMG!

    1. Дмитрий (автор)
Добавить комментарий для AlexD Отменить ответ

Получать новые комментарии по электронной почте.