SlideShare a Scribd company logo
1 of 11
Оптимальная архитектура 
плагина 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

What's hot

Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиKirill Mokevnin
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Alina Dolgikh
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Fwdays
 
Heroku for Java developer
Heroku for Java developerHeroku for Java developer
Heroku for Java developerVRPInc
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
 
Инструменты и лайфхаки тестирования REST API
Инструменты и лайфхаки тестирования REST APIИнструменты и лайфхаки тестирования REST API
Инструменты и лайфхаки тестирования REST APISQALab
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovJavaDayUA
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
Ubuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартUbuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартAndrey Matukhno
 
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Dakiry
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 

What's hot (20)

Chef
ChefChef
Chef
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статики
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
 
Heroku for Java developer
Heroku for Java developerHeroku for Java developer
Heroku for Java developer
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
PHP
PHPPHP
PHP
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Инструменты и лайфхаки тестирования REST API
Инструменты и лайфхаки тестирования REST APIИнструменты и лайфхаки тестирования REST API
Инструменты и лайфхаки тестирования REST API
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Правильный REST API
Правильный REST APIПравильный REST API
Правильный REST API
 
Ubuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартUbuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий старт
 
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 

Similar to Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Types основе

Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1dima_kuzovlev
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskMODX Беларусь
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборокAndrii Podanenko
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответDenis Izmaylov
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 

Similar to Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Types основе (20)

Web deployment
Web deploymentWeb deployment
Web deployment
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборок
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 

Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Types основе

  • 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