Это не вопрос о том, как создать плагин WordPress. Скорее, какие, если таковые имеются, руководства могут быть применены к тому, как собрать файловую архитектуру любого плагина.
Некоторые другие языки программирования или библиотеки имеют очень контролируемые способы организации каталогов и файлов. Иногда это раздражает и подчеркивает свободу, которую предлагает PHP, но с другой стороны плагины WordPress собираются любым способом, который определяется их автором.
Правильного ответа нет , но я надеюсь уточнить, как я и другие строим плагины, чтобы сделать их более дружественными для других разработчиков, удобнее в отладке, более удобными для навигации и, возможно, более эффективными.
Последний вопрос: как вы думаете, как лучше организовать плагин?
Ниже приведены несколько примеров структур, но ни в коем случае не исчерпывающий список. Не стесняйтесь добавлять свои собственные рекомендации.
Предполагаемая структура по умолчанию
/wp-content
/plugins
/my-plugin
my-plugin.php
Метод Model View Controller (MVC)
/wp-content
/plugins
/my-plugin
/controller
Controller.php
/model
Model.php
/view
view.php
my-plugin.php
MVC три части:
- В модели взаимодействует с базой данных, запросов и сохранения данных, а также содержит логику.
- Контроллер будет содержать шаблонные теги и функции, вид будет использовать.
- Вид отвечает , чтобы отобразить данные , предоставленные моделью , как строится с помощью контроллера.
Организовано по типу метода
/wp-content
/plugins
/my-plugin
/admin
admin.php
/assets
css/
images/
/classes
my-class.php
/lang
my-es_ES.mo
/templates
my-template.php
/widgets
my-widget.php
my-plugin.php
WordPress плагин Boilerplate
Доступно на Github
На основе API плагинов , Стандарты кодирования и документация Стандарты .
/wp-content
/plugins
/my-plugin
/admin
/css
/js
/partials
my-plugin-admin.php
/includes
my_plugin_activator.php
my_plugin_deactivator.php
my_plugin_i18n.php
my_plugin_loader.php
my_plugin.php
/languages
my_plugin.pot
/public
/css
/js
/partials
my-plugin-public.php
LICENSE.txt
README.txt
index.php
my-plugin.php
uninstall.php
Свободно организованный метод
/wp-content
/plugins
/my-plugin
css/
images/
js/
my-admin.php
my-class.php
my-template.php
my-widget.php
my-plugin.php
источник
css/
,images/
иjs/
будетstyles/
,images/
иscripts/
.Ответы:
Обратите внимание, что все плагины являются «контроллерами» по стандартам WP.
Это зависит от того, что должен делать плагин, но во всех случаях я бы старался максимально отделить вывод экрана от кода PHP.
Вот один из способов сделать это легко - сначала определите функцию, которая загружает шаблон:
Теперь, если плагин использует виджет для отображения данных:
Шаблон:
файлы:
Где вы размещаете свои CSS, JS, изображения или как вы проектируете контейнер для хуков, менее важно. Я полагаю, это вопрос личных предпочтений.
источник
Это зависит от плагина. Это моя основная структура почти для каждого плагина:
Это было бы то, что будет идти в
lib
папке.Если это особенно сложный плагин с большим количеством функций в области администрирования, я бы добавил
admin
папку, содержащую все эти файлы PHP. Если плагин делает что-то вроде замены включенных файлов тем , возможно, там также есть папкаtemplate
илиtheme
.Итак, структура каталогов может выглядеть так:
источник
ИМХО, самый простой, самый мощный и самый обслуживаемый маршрут - это использовать структуру MVC, а WP MVC разработан, чтобы сделать написание плагинов MVC очень простым (хотя я немного предвзят, хотя ...). С WP MVC вы просто создаете модели, представления и контроллеры, а все остальное обрабатывается за кулисами.
Отдельные контроллеры и представления могут быть сделаны для публичного и административного разделов, и вся инфраструктура использует преимущества многих собственных функций WordPress. Файловая структура и большая часть функциональности точно такие же, как и в самых популярных средах MVC (Rails, CakePHP и т. Д.).
Больше информации и учебное пособие можно найти здесь:
источник
Мы используем сочетание всех методов. Прежде всего, мы используем Zend Framework 1.11 в наших плагинах, и поэтому нам пришлось использовать аналогичную структуру для файлов классов из-за механики автозагрузки.
Структура нашего основного плагина (который используется всеми нашими плагинами в качестве основы) выглядит примерно так:
webeo-core.php
файл в корневой папке плагина.Webeo_CoreLoader
класс внутри этого файла, который устанавливает некоторые константы плагина, инициализирует автозагрузчик класса и вызывает метод установкиCore.php
класса внутриlib/Webeo
папки. Это работает наplugins_loaded
хуке действия с приоритетом9
.Core.php
Класс наш плагин файл начальной загрузки. Название основано на названии плагинов.Как видите, у нас в
lib
папке есть подкаталог для всех пакетов наших поставщиков (Webeo
,Zend
). Все субпакеты внутри поставщика структурированы самим модулем. Для новойMail Settings
административной формы у нас будет следующая структура:Наши суб-плагины имеют одинаковую структуру с одним исключением. Мы углубляемся в папку vendor из-за разрешения конфликтов имен во время события автозагрузки. Мы также называем класс плагина boostrap
E.g. Faq.php
приоритетным10
внутриplugins_loaded
хука.Я, вероятно, переименую
lib
папку вvendors
и переместить все общие папки (css, images, js, languages) в папку с именемpublic
в следующем выпуске.источник
Как многие здесь уже ответили, это действительно зависит от того, что плагин должен делать, но вот моя базовая структура:
источник
Я неравнодушен к следующему макету плагина, однако обычно он меняется в зависимости от требований к плагину.
Мне еще предстоит создать плагин для WordPress, требующий архитектуры в стиле MVC, но если бы я это сделал, я бы выложил его с отдельным каталогом MVC, который сам содержит views / controllers / models.
источник
Моя логика: чем больше плагин, тем больше структуры я использую.
Для больших плагинов я склонен использовать MVC.
Я использую это как отправную точку и пропускаю то, что не нужно.
источник
Все мои плагины следуют этой структуре, которая, кажется, очень похожа на то, что делает большинство других разработчиков:
В этом случае plugin-folder.php обычно является классом, который загружает все необходимые файлы из ядра / папки. Чаще всего на крючке init или plugins_loaded.
Я также использовал префикс всех своих файлов, но, как заметил @kaiser выше, он действительно избыточен, и недавно я решил удалить его из любых будущих плагинов.
Библиотека / папка содержит все внешние вспомогательные библиотеки, от которых может зависеть плагин.
В зависимости от плагина, в корне плагина также может быть файл uninstall.php. Однако в большинстве случаев это выполняется с помощью register_uninstall_hook ().
Очевидно, что некоторые плагины могут не требовать каких-либо файлов администратора или шаблонов и т. Д., Но приведенная выше структура работает для меня. В конце концов вам просто нужно найти структуру, которая работает для вас, а затем придерживаться ее.
У меня также есть плагин для начинающих, основанный на приведенной выше структуре, который я использую в качестве отправной точки для всех своих плагинов. Все, что мне нужно сделать, это выполнить поиск / замену префиксов функций / классов и отключиться. Когда я все еще делал префикс своих файлов, это был дополнительный шаг, который я должен был сделать (и довольно раздражающий при этом), но теперь мне просто нужно переименовать папку плагинов и основной файл плагинов.
источник
Кроме того, посмотрите этот замечательный шаблон WP виджета . Он дает отличные подсказки относительно структур (даже если для отдельных моделей нет ни класса, ни папки).
источник
Менее распространенный подход к структурированию файлов и каталогов плагина - это подход типа файлов. Здесь стоит упомянуть для полноты картины:
Каждый каталог содержит только файлы этого типа. Стоит отметить, что этот подход не работает, когда у вас есть много типов файлов,
.png .gif .jpg
которые, например, могут быть более логично размещены в одном каталогеimages/
.источник