Перейти к содержанию

Контентная модель WordPress

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

В этой серии рассмотрим учебную «Веб-мастерскую». У неё есть описание проекта, контакты, небольшие статьи о веб-разработке и каталог курсов. Это самостоятельный пример WordPress, а не предложение заменить действующий статический ProfessorWeb. Опыт ProfessorWeb используем в одном существенном месте: структуру материалов и публичные URL следует согласовать до обновления оформления. Иначе новый красивый интерфейс легко скрывает прежние страницы от читателей.

Запись, страница и рубрика

Запись подходит материалу, который входит в поток публикаций: «Как браузер получает HTML», «Почему изображение сдвигает страницу», «Что хранится в Git». У записи есть автор, дата, статус, рубрики и метки. Дата не делает текст одноразовой новостью: техническое объяснение может оставаться полезным годами. Она лишь обозначает время публикации и участвует в представлении списка. Обновляя пример, не нужно создавать новую запись только ради появления в верхней части ленты.

Страница подходит устойчивому узлу сайта: «О мастерской», «Контакты», «Как учиться». Обычно её положение объясняется назначением, а не датой выхода. Страницы могут иметь родителей, но родительская связь не заменяет меню. Посетителю можно показать страницу в нескольких местах навигации, не создавая несколько копий. Различия страниц и записей описаны в документации WordPress о страницах. В нашем примере «Как учиться» станет страницей, а рассказ о конкретной ошибке загрузки — записью.

Рубрика объединяет записи по устойчивой теме. Создадим «Основы веба» со слагом web-basics и «Практика» со слагом practice. Это не две папки, в которые физически перекладывается текст. Одна запись может принадлежать нескольким рубрикам, а архив рубрики показывает результаты выборки. Связь «родительская рубрика — дочерняя рубрика» описывает тематическую иерархию. Она не гарантирует последовательное чтение уроков и не хранит номер следующей главы.

Зафиксируем первые материалы в редакционной таблице. Это полный набор исходных сущностей первого шага; числовые ID назначит ваша отдельная установка.

Ключ Вид Заголовок Слаг Связь
about page О мастерской about без родителя
contacts page Контакты contacts без родителя
study page Как учиться study без родителя
html-request post Как браузер получает HTML html-request web-basics
image-shift post Почему изображение сдвигает страницу image-shift practice
git-history post Что хранится в Git git-history practice

Таблица позволяет обсуждать структуру без установки движка. Ключ нужен нашей документации и переносам; это не встроенное поле WordPress. Слаг относится к адресу, заголовок — к подписи материала, а числовой ID — к внутренней идентичности записи. После переименования заголовка ID остаётся прежним. Адрес тоже можно сохранить, если редактор не меняет слаг. Такое разделение помогает избежать случайного переезда страницы при небольшой правке текста.

Почему курс не равен рубрике

Добавим будущие курсы: JavaScript — двадцать уроков, HTML и CSS — шестнадцать, Markdown — двенадцать, производительность — двенадцать. Пока это четыре строки проектной модели. Мы не создаём отдельный тип материала в первом уроке: сначала нужно понять, какую задачу он решит. У курса будут собственное описание, количество уроков и постоянная карточка. У рубрики же основная задача — выбрать записи по теме. Эти сущности имеют разные жизненные циклы.

Например, курс JavaScript может включать главы об HTTP, доступности и хранении данных. Если поместить все эти записи только в рубрику JavaScript, тематический каталог станет беднее. Если присвоить им все подходящие рубрики, архив перестанет быть надёжным оглавлением курса. Необходимо отдельно хранить принадлежность к последовательности и порядок. В этой серии тип pw_course появится позже, а полноценная связь между курсом и отдельными уроками останется проектной границей: одно поле «20 уроков» такой связи не создаёт.

Метки пригодны для дополнительных пересечений: «изображения», «DevTools», «Git». Не начинайте с сотен меток, каждая из которых встречается один раз. Архив без самостоятельной пользы не становится ценным только потому, что у него появился URL. Для нашей мастерской достаточно сначала двух рубрик. Когда появится несколько материалов о DevTools, редакция сможет решить, нужен ли отдельный тематический вход и кто отвечает за его содержание.

Как заметить ошибку модели

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

Другой ошибочный случай — несколько страниц с одинаковым текстом курса, созданных для разных рубрик. Редактор обновляет одну, вторая остаётся с прежним количеством уроков. Мы получаем противоречие данных ещё до проблемы поискового дублирования. В правильной модели одна карточка курса имеет один авторитетный текст, а разные оглавления ссылаются на неё. Для проверки возьмите JavaScript и мысленно измените количество уроков с двадцати на двадцать один: ответ должно требовать изменения одного источника.

Ожидаемый результат урока — согласованная таблица шести материалов, двух рубрик и четырёх будущих курсов. Пока это редакционный результат, а не созданная база WordPress. Примеры серии подготовлены без запуска движка; реальные ID, адреса архивов и отображение темы предстоит проверить на отдельном стенде. Уже сейчас можно объяснить, почему «Как учиться» является страницей, статья об изображениях — записью, а рубрика «Практика» не обещает порядок прохождения курса. Следующий шаг переведёт эту договорённость в воспроизводимую учебную среду.

Оглавление серии