Методы интеграции данных плагина с темами


17

Я хотел бы получить некоторые мнения относительно лучших практик для разработки плагинов 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", используемые для этой цели. Фактически, вы можете использовать шаблоны из папки тем, и если их нет, вы можете использовать эти фильтры для предоставления представлений по умолчанию.

Вопрос

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

Спасибо!


3
Если бы все вопросы по WPSE были бы так хорошо продуманы ... :)
scribu

@scribu ... ты просто так говоришь, потому что я включил ссылку на твой плагин;) Если серьезно, спасибо за комплимент. Я волновался, что это глупый вопрос, но этот вопрос мучил меня некоторое время.
Tollmanz

Еще +1 от меня. Для «почему» прочитайте комментарий @scribu.
Кайзер

@kaiser & scribu ... Надеюсь, вы оба поделитесь своими мыслями на эту тему. Я хотел бы услышать, что вы говорите.
Tollmanz

@tollmanz Уже сделано. Но такой интенсивный вопрос требует немного мысли и времени.
Кайзер

Ответы:


4

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

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

2. Избегайте наполнения каждого варианта использования. Вы должны поддерживать свой плагин. WP предлагает новую версию каждые три месяца. И иногда трудно следовать всем вашим плагинам. Для примера: новая версия API настроек в настоящее время обсуждается на Trac., Когда это будет закончено, есть шанс, что многим разработчикам плагинов или тем потребуется изменить большую часть кода, а некоторые люди, такие как я, даже написали уровень абстракции над API. Поэтому вам нужно вернуться, переписать свой базовый / абстракционный слой, а затем переработать все, что вызывает его части. Я обещаю, что это много работы. И даже больше, если он тесно связан с вашим кодом. Когда вы начнете заполнять множество сценариев использования, у вас также будет много изменений в ядре WP, которые нужно отслеживать, а также много работы по поддержанию кода в актуальном состоянии.

3. Никогда не пытайтесь связать много примеров кода (или шаблонов) в ваши плагины или темы. Если вы хотите ориентироваться на разработчиков и конечных пользователей: используйте свой блог для документации. Разработчики ненавидят подобные вещи, и конечные пользователи никогда не удовлетворяются (см .: заполнение каждого варианта использования).

4. Мудро разделите ваш код на отдельные файлы. Основное правило: один файл на одну часть. Пример: styles.php, scripts.php, taxonomies.php, cpts.php и т. Д. Загрузите все из «материнского» (фабричного) класса и оставьте ваши вещи «подключаемыми». Если вам нужно переписать материал, вы найдете это легко. Если разработчики что-то ищут: они найдут это легко. Много хорошо названных файлов, не навреди тебе.

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

6. Люблю твой плагин. Но отпусти, если тебе скучно. :)


Теперь - вкратце - кое-что о вашей идее плагина в деталях:

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

B. Короткие коды - это kool. Они никому не навредят, если плагин пропадет (в большинстве случаев) и может быть позже расширен / расширен до кнопок TinyMCE (которые люди любят).

C. Дайте понять, что вашему плагину нужен другой плагин. Задайте этот вопрос и добавьте примечание к admin_notices (через register_activation_hook), если другой плагин не завершает работу (свяжите его в этом случае) или не активирован (вы можете сделать это для пользователя при активации). Также обратите внимание, что этот плагин исходит из надежного источника и будет поддерживаться в течение следующих лет.

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


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

1
Спасибо за ваши мысли. Здесь много общего с плагином. Что касается моего вопроса, похоже, ваш метод - дать очень мало в плане интеграции тем; скорее, вы хотите, чтобы пользователь понял это с помощью документации. Я могу понять, почему это разумный метод, но в то же время, я пишу так, что многие пользователи будут чувствовать, что в плагине чего-то не хватает. С моим примером, я думаю, пользователи чувствовали бы, что что-то сломалось, если бы не было встроенной поддержки для отображения групп / альбомов / треков.
Tollmanz

Если вы хотите придерживаться этого, я бы посоветовал вам использовать шорткод для добавления разметки в cpt (или внутри где-то еще). Что касается стилей: я бы просто проверил, присутствует ли конкретная таблица стилей где-нибудь в папке дочерней> родительской темы. Если да: он будет молча переопределять / -rule основной таблицы стилей. Таким образом, вы можете удовлетворить обоих разработчиков как конечных пользователей.
Кайзер

@ Кайзер ... обе сплошные точки.
Tollmanz

2

В некоторых отношениях вам необходимо взвесить баланс между созданием плагина или темы, если ваш сценарий требует большого количества настроек / функций, обычно всегда лучше создать тему вместо этого. Таким образом, пользователь может настроить внешний вид с точки зрения внешнего вида, что всегда проще, чем заставить пользователя настраивать функциональность (повсеместно заклинивая шорткоды), вы получаете больший контроль над функциями, он работает с другими плагинами и т. Д.

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

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

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


Хорошая идея о концептуализации этого как плагина (особенно для маркетинговых выгод). Самая большая проблема в том, что плагин и его данные не всегда должны приводить к целой теме. Это может быть просто меньший компонент сайта, который, к сожалению, нуждается в тематическом оформлении. Тем не менее, я понимаю, что удовлетворить все группы пользователей просто невозможно, и лучше всего стремиться к одной группе.
Tollmanz

2

Виртуальные страницы

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

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

Отличный пример этого можно найти в плагине bbPress:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


Вы бы предложили пример кода? Я думаю, это то, что многие разработчики плагинов хотели бы увидеть. (+1).
Кайзер

Вы можете посмотреть на новый плагин bbPress для примера.
scribu

Это очень интересно Мне придется посмотреть на код, прежде чем выносить суждение.
Tollmanz

@scribu: я искал, чтобы добавить ссылку, но я не могу найти ее через plugins.svn. Не могли бы вы опубликовать ссылку для более поздних читателей? Благодарю.
Кайзер

Это прямо здесь: wordpress.org/extend/plugins/bbpress :)
scribu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.