Я хотел бы получить некоторые мнения относительно лучших практик для разработки плагинов WordPress, которые обеспечивают интеграцию тем.
Чтобы иметь смысл, задавая этот вопрос, позвольте мне начать с гипотетического примера сценария, который мне интересен. Представьте, что я создаю плагин под названием «Дискография». Дискография регистрирует три пользовательских типа записей: «Группы», «Альбомы» и «Треки». Плагин также предоставляет мета-блоки, которые предоставляют подробную информацию для каждого типа поста, а также настраиваемые таксономии для организации каждого типа поста. Эти типы сообщений связаны с плагином Posts 2 Posts . Внутри администратора пользователь может добавлять новые группы, которые могут быть связаны с альбомами, которые, в свою очередь, связаны с треками, и все они будут иметь много других данных, добавленных к ним через мета-блоки и таксономии.
Теперь я не хочу, чтобы этот плагин просто настраивал администратора, чтобы пользователи могли вводить эту информацию; Я хотел бы, чтобы он предоставил некоторые отображения по умолчанию для данных. Более продвинутый пользователь / разработчик будет в порядке, имея только этого администратора. Ей было бы достаточно легко получить эти данные и использовать их в теме; однако без некоторых представлений по умолчанию этот плагин был бы бесполезен для большинства пользователей. В этом примере вы можете отобразить что-нибудь подобное (в скобках указаны способы отображения информации в порядке иерархии шаблонов):
- Полосы (single-prefix-band.php, single.php, index.php, шорткод)
- Альбомы (single-prefix-album.php, single.php, index.php, шорткод)
- Треки (single-prefix-track.php, single.php, index.php, шорткод)
- Список бэндов (template-band-list.php, page-band-list.php, page- {id} .php, page.php, index.php, шорткод)
- Список альбомов (template-album-list.php, page-album-list.php, page- {id} .php, page.php, index.php, шорткод)
- Временная шкала альбома (template-album-timeline.php, page-album-timeline.php, page- {id} .php, page.php, index.php, шорткод)
Важно, что для этих типов записей существует представление по умолчанию, поскольку файлы шаблона по умолчанию не отображают всю информацию, необходимую для каждого из типов записей. Например, тема Twenty Eleven по умолчанию будет просто отображать название, категории, описание и дату публикации альбома. Не очень полезно для альбома. Я хотел бы предоставить единый шаблон поста, который включает группу, дату выпуска, лейбл, версии альбомов, треки и т. Д. Как разработчик плагинов, я чувствую, что это было бы важно предоставить. Я знаю, что шаблон не подойдет для каждой темы, но должны быть некоторые настройки по умолчанию, которые могут быть дополнительно интегрированы с темой пользователя.
Опять же, мне интересно, как лучше всего справиться с этой ситуацией? Я думаю, что вы могли бы сделать любое из следующего.
Шорткоды
Шорткоды можно использовать как очень гибкий и удобный для пользователя способ, позволяющий сторонним разработчикам добавлять группы, альбомы, треки, списки групп и т. Д. В любом месте сайта. Было бы полезно показывать группы на определенных страницах или создавать отдельные страницы для каждой группы (не очень эффективно, но некоторые пользователи подходят к этому так). Шорткод будет генерировать HTML, который будет привязан к предоставленному файлу CSS, который обеспечит хорошее представление по умолчанию желаемых данных. Все будет содержаться в файлах плагина и ничего не нужно делать с темой.
Файлы шаблонов
Плагин также может поставляться с файлами шаблонов. Файлы шаблонов могут быть размечены и стилизованы для приятного просмотра по умолчанию. Вы можете предоставить инструкции для пользователя по перемещению файлов в папку темы, чтобы тема могла найти нужные шаблоны при просмотре типов сообщений. Вы могли бы даже пойти так далеко, что предоставили интерфейс, позволяющий пользователю перемещать файлы одним щелчком мыши (примечание: я бы не стал создавать файлы в папке тем пользователя при активации, поскольку добавление файлов в их тему без их инициации - зло) ,
Вы также можете использовать фильтры, чтобы использовать эти файлы, не перемещая их из папки плагинов, сохраняя все автономно. Я видел фильтры "template_include" и "{$ type} _template", используемые для этой цели. Фактически, вы можете использовать шаблоны из папки тем, и если их нет, вы можете использовать эти фильтры для предоставления представлений по умолчанию.
Вопрос
Мне нравится знать, что другие считают наилучшей практикой для таких ситуаций, если представленные идеи являются проблематичными в любом случае, и любые альтернативы, которые я не включил.
Спасибо!