SlideShare a Scribd company logo
Оптимальная архитектура 
плагина WordPress 
Custom Post Types 
• Идея плагина 
• Архитектура кода 
• Структура БД 
Идея + 
архитектура 
• Дизайно-верстка 
• Front-End 
• Back-End 
Разработка 
• Тестирование 
• Отладка Тестирование 
06.09.2014 Saint-Petersburg WordPress Meetup #2 
Igor Sazonov@tigusigalpa
План доклада 
• Правила обычного плагина WordPress 
• Архитектура WooCommerce 
• Архитектура Easy Digital Downloads 
• Архитектура Yoast 
• Вывод и построение своей архитектуры кода 
• Что такое Singleton? 
• Суть предлагаемой архитектуры 
• Ссылка на скачивание базового плагина…. Идеи..
Правила обычного плагина WordPress 
/wp-content/plugins/my-plugin – папка плагина 
/wp-content/plugins/my-plugin/somefile.php – файл с метаданными плагина – главный файл плагина – 
входная точка 
WordPress сканирует все папки внутри wp-content/plugins и ищет там файл с метаданными (wp-admin/ 
includes/plugin.php:get_plugins()#288 строка с помощью get_plugin_data()) 
/** 
* Plugin Name: Some Plugin Name 
* Plugin URI: http://www.somewpplugin.com 
* Description: Great Plugin! 
* Author: Ivan Ivanov 
* Author URI: http://www.ivanivanov.com 
* Version: 1.0 
*/ 
Но это самый примитивный способ
Архитектура WooCommerce (не все – 
структура) 
WooCommerce 
 assets 
 css 
 fonts 
 images 
 js 
 admin 
 frontend 
 jquery-cookie….. 
 i18n 
 languages… 
 includes 
 admin 
 api 
 libraries 
 shortcodes 
 class-wc-commets.php…. 
 class-wc-install.php…. 
 uninstall.php 
 woocommerce.php 
WordPress 
woocommerce.php 
(class WooCommerce: defines+includes) 
php-classes 
/includes
Архитектура Easy Digital Downloads (не 
все – структура) 
Easy Digital Downloads 
 assets 
 css 
 fonts 
 images 
 colorbox 
 icons… 
 js 
 admin-scripts.js 
 edd-ajax.js… 
 includes 
 admin 
 cart 
 checkout 
 class-edd-cron.php… 
 languages 
 templates 
 fonts 
 images 
 widget-cart-empty.php… 
 easy-digital-downloads.php 
 uninstall.php 
WordPress 
easy-digital-downloads.php 
(class Easy_Digital_Downloads: Singleton+defines+includes) 
php-classes 
/includes
Архитектура Yoast (не все – структура) 
YoastWordPress SEO 
• admin 
• license-manager 
• pages 
• bulk-title-editor.php… 
• ajax.php 
• class-pointers.php… 
• css 
• frontend 
• class-breadcrumbs.php… 
• images 
• inc 
• class-rewrite.php… 
• js 
• languages 
• wp-seo.php 
• wp-seo-main.php 
WordPress 
wp-seo.php (defines) 
wp-seo-main.php (defines+includes) 
/admin 
php-classes 
/admin/pages 
/inc 
/frontend
Вывод и построение своей файловой 
архитектуры 
Выводы: 
• все файлы front-end (js, css, images, fonts) в отдельную папку 
assets 
• Файлы (если их более 1) подключаемых скриптов – в подпапки 
(images/colorbox) 
• Логику в папку lib. Разделяем логику (php) на отдельные файлы 
(например, lib/setup.php) или блоки (lib/widgets) с файлами
Вывод и построение своей архитектуры 
Оптимальная структура файлов 
(наверное): 
- assets 
- css 
- fonts 
- images 
- some-lib-files-if-needed 
- js 
- languages 
- lib 
- some-folders 
- setup.php – инициализация всех 
action’ов 
- plugin-name.php – главный входной 
файл с метаданными 
- uninstall.php 
WordPress 
plugin-name.php 
/lib/setup.php 
(class Plugin_Setup+includes+defines) 
php-classes 
/lib
Что такое Singleton 
Singleton – порождающий шаблон проектирования, гарантирующий что в однопоточном приложении 
будет единственный экземпляр класса с глобальной точкой доступа. 
class MyClass { 
private static $_instance; 
public function __construct() { 
/*do something*/ 
} 
public static function getInstance() { 
if ( ! isset( self::$_instance ) && ! ( self::$_instance instanceof MyClass ) ) { 
self::$_instance = new self(); 
} 
return self::$_instance; 
} 
}
Суть (для понимания кода плагина) 
1. Входной файл (plugin-name.php) передает управление в lib/setup.php в 
конструктор класса MyPlugin_Setup. Этот класс будет содержать в себе 
настройки плагина (версия итп) и будет родителем для всех классов из 
папки lib. 
2. В конструкторе класса MyPlugin_Setup происходит подключение файлов 
из папки lib и дефайн (определение) необходимых значений (путь к 
плагину итп). Каждый файл в папке lib это соответствующий класс, 
который наследуется от класса MyPlugin_Setup, а также каждый класс 
содержит в себе Singleton-метод getInstance() и метод init(); 
3. Конструктор класса MyPlugin_Setup в конструкторе перебирает все 
классы из подключенных файлов и через Singleton каждого класса 
вызывает метод init(); 
Таким образом мы разделяем логику плагина на соответствующие 
тематические блоки/классы. Это удобно для совместной работы над 
плагином и просто удобно.
Ссылка на скачивание базового плагина 
https://www.dropbox.com/s/iosj1r4suyrt9kv/optimal-big-plugin. 
zip?dl=0

More Related Content

More from The NGO Development Center

Добрый октябрьск
Добрый октябрьскДобрый октябрьск
Добрый октябрьск
The NGO Development Center
 
Добрый Тольятти
Добрый ТольяттиДобрый Тольятти
Добрый Тольятти
The NGO Development Center
 
Добрый Псков
Добрый ПсковДобрый Псков
Добрый Псков
The NGO Development Center
 
Добрый Новосибирск
Добрый НовосибирскДобрый Новосибирск
Добрый Новосибирск
The NGO Development Center
 
Добрый Нижний
Добрый НижнийДобрый Нижний
Добрый Нижний
The NGO Development Center
 
добрый з...
                                                                     добрый з...                                                                     добрый з...
добрый з...
The NGO Development Center
 
Программа тренинга для тренеров 6-8 октября
Программа тренинга для тренеров 6-8 октябряПрограмма тренинга для тренеров 6-8 октября
Программа тренинга для тренеров 6-8 октября
The NGO Development Center
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Angular js
Angular jsAngular js
раздаточные материалы митап 30 июня 2014
раздаточные материалы митап 30 июня 2014раздаточные материалы митап 30 июня 2014
раздаточные материалы митап 30 июня 2014The NGO Development Center
 
SMM - Екатерина Кондратьева
SMM - Екатерина КондратьеваSMM - Екатерина Кондратьева
SMM - Екатерина КондратьеваThe NGO Development Center
 
PR некоммерческого проекта
PR некоммерческого проектаPR некоммерческого проекта
PR некоммерческого проекта
The NGO Development Center
 
кто я? Как представить свой проект.
кто я? Как представить свой проект.кто я? Как представить свой проект.
кто я? Как представить свой проект.The NGO Development Center
 
1 elena topoleva o zelyah i zadachah konferenzii
1 elena topoleva o zelyah i zadachah konferenzii1 elena topoleva o zelyah i zadachah konferenzii
1 elena topoleva o zelyah i zadachah konferenziiThe NGO Development Center
 

More from The NGO Development Center (15)

Добрый октябрьск
Добрый октябрьскДобрый октябрьск
Добрый октябрьск
 
Добрый Тольятти
Добрый ТольяттиДобрый Тольятти
Добрый Тольятти
 
Добрый Псков
Добрый ПсковДобрый Псков
Добрый Псков
 
Добрый Новосибирск
Добрый НовосибирскДобрый Новосибирск
Добрый Новосибирск
 
Добрый Нижний
Добрый НижнийДобрый Нижний
Добрый Нижний
 
добрый з...
                                                                     добрый з...                                                                     добрый з...
добрый з...
 
Программа тренинга для тренеров 6-8 октября
Программа тренинга для тренеров 6-8 октябряПрограмма тренинга для тренеров 6-8 октября
Программа тренинга для тренеров 6-8 октября
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Angular js
Angular jsAngular js
Angular js
 
раздаточные материалы митап 30 июня 2014
раздаточные материалы митап 30 июня 2014раздаточные материалы митап 30 июня 2014
раздаточные материалы митап 30 июня 2014
 
SMM - Екатерина Кондратьева
SMM - Екатерина КондратьеваSMM - Екатерина Кондратьева
SMM - Екатерина Кондратьева
 
PR некоммерческого проекта
PR некоммерческого проектаPR некоммерческого проекта
PR некоммерческого проекта
 
Security
SecuritySecurity
Security
 
кто я? Как представить свой проект.
кто я? Как представить свой проект.кто я? Как представить свой проект.
кто я? Как представить свой проект.
 
1 elena topoleva o zelyah i zadachah konferenzii
1 elena topoleva o zelyah i zadachah konferenzii1 elena topoleva o zelyah i zadachah konferenzii
1 elena topoleva o zelyah i zadachah konferenzii
 

Оптимальная архитектура плагина WordPress

  • 1. Оптимальная архитектура плагина WordPress Custom Post Types • Идея плагина • Архитектура кода • Структура БД Идея + архитектура • Дизайно-верстка • Front-End • Back-End Разработка • Тестирование • Отладка Тестирование 06.09.2014 Saint-Petersburg WordPress Meetup #2 Igor Sazonov@tigusigalpa
  • 2. План доклада • Правила обычного плагина WordPress • Архитектура WooCommerce • Архитектура Easy Digital Downloads • Архитектура Yoast • Вывод и построение своей архитектуры кода • Что такое Singleton? • Суть предлагаемой архитектуры • Ссылка на скачивание базового плагина…. Идеи..
  • 3. Правила обычного плагина WordPress /wp-content/plugins/my-plugin – папка плагина /wp-content/plugins/my-plugin/somefile.php – файл с метаданными плагина – главный файл плагина – входная точка WordPress сканирует все папки внутри wp-content/plugins и ищет там файл с метаданными (wp-admin/ includes/plugin.php:get_plugins()#288 строка с помощью get_plugin_data()) /** * Plugin Name: Some Plugin Name * Plugin URI: http://www.somewpplugin.com * Description: Great Plugin! * Author: Ivan Ivanov * Author URI: http://www.ivanivanov.com * Version: 1.0 */ Но это самый примитивный способ
  • 4. Архитектура WooCommerce (не все – структура) WooCommerce  assets  css  fonts  images  js  admin  frontend  jquery-cookie…..  i18n  languages…  includes  admin  api  libraries  shortcodes  class-wc-commets.php….  class-wc-install.php….  uninstall.php  woocommerce.php WordPress woocommerce.php (class WooCommerce: defines+includes) php-classes /includes
  • 5. Архитектура Easy Digital Downloads (не все – структура) Easy Digital Downloads  assets  css  fonts  images  colorbox  icons…  js  admin-scripts.js  edd-ajax.js…  includes  admin  cart  checkout  class-edd-cron.php…  languages  templates  fonts  images  widget-cart-empty.php…  easy-digital-downloads.php  uninstall.php WordPress easy-digital-downloads.php (class Easy_Digital_Downloads: Singleton+defines+includes) php-classes /includes
  • 6. Архитектура Yoast (не все – структура) YoastWordPress SEO • admin • license-manager • pages • bulk-title-editor.php… • ajax.php • class-pointers.php… • css • frontend • class-breadcrumbs.php… • images • inc • class-rewrite.php… • js • languages • wp-seo.php • wp-seo-main.php WordPress wp-seo.php (defines) wp-seo-main.php (defines+includes) /admin php-classes /admin/pages /inc /frontend
  • 7. Вывод и построение своей файловой архитектуры Выводы: • все файлы front-end (js, css, images, fonts) в отдельную папку assets • Файлы (если их более 1) подключаемых скриптов – в подпапки (images/colorbox) • Логику в папку lib. Разделяем логику (php) на отдельные файлы (например, lib/setup.php) или блоки (lib/widgets) с файлами
  • 8. Вывод и построение своей архитектуры Оптимальная структура файлов (наверное): - assets - css - fonts - images - some-lib-files-if-needed - js - languages - lib - some-folders - setup.php – инициализация всех action’ов - plugin-name.php – главный входной файл с метаданными - uninstall.php WordPress plugin-name.php /lib/setup.php (class Plugin_Setup+includes+defines) php-classes /lib
  • 9. Что такое Singleton Singleton – порождающий шаблон проектирования, гарантирующий что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа. class MyClass { private static $_instance; public function __construct() { /*do something*/ } public static function getInstance() { if ( ! isset( self::$_instance ) && ! ( self::$_instance instanceof MyClass ) ) { self::$_instance = new self(); } return self::$_instance; } }
  • 10. Суть (для понимания кода плагина) 1. Входной файл (plugin-name.php) передает управление в lib/setup.php в конструктор класса MyPlugin_Setup. Этот класс будет содержать в себе настройки плагина (версия итп) и будет родителем для всех классов из папки lib. 2. В конструкторе класса MyPlugin_Setup происходит подключение файлов из папки lib и дефайн (определение) необходимых значений (путь к плагину итп). Каждый файл в папке lib это соответствующий класс, который наследуется от класса MyPlugin_Setup, а также каждый класс содержит в себе Singleton-метод getInstance() и метод init(); 3. Конструктор класса MyPlugin_Setup в конструкторе перебирает все классы из подключенных файлов и через Singleton каждого класса вызывает метод init(); Таким образом мы разделяем логику плагина на соответствующие тематические блоки/классы. Это удобно для совместной работы над плагином и просто удобно.
  • 11. Ссылка на скачивание базового плагина https://www.dropbox.com/s/iosj1r4suyrt9kv/optimal-big-plugin. zip?dl=0