В этой записи пойдет речь о лучших практиках при разработке плагина, а так же основных функций WordPress.
Используйте уникальные имена
Важно помнить, что вы не один разработчик и может случиться так, что название функции или класса, которое вы написала уже может использоваться кем-то.
Вы можете избежать этого, если будите пользоваться описанными решениями ниже.
Процедурное программирование
По умолчанию, все переменные, функции и классы становятся глобальными — это означает, что вы можете перезаписать данных других плагинов и наоборот. Переменные, которые объявленные внутри функций или классов не становятся глобальными.
везде Используйте префикс
Все переменные, функции и классы должны иметь свой уникальный префикс. Префикс помогает избежать перезаписи существующих переменных и функций или ошибочного вызова существующих.
Проверить на существование
PHP имеет массу вариантов проверить существование переменных, функций и классов. Все варианты перечисленные ниже, возвращают true
, если оно существует.
- Переменые: isset() (можно проверить массивы, объекты и др.)
- Функции: function_exists()
- Классы: class_exists()
- Константы: defined()
Пример:
<?php // создаем функцию "bologer_init", если она не существует if ( !function_exists( 'bologer_init' ) ) { function bologer_init() { register_setting( 'bologer_settings', 'bologer_option_foo' ); } } // Создаем функцию "bologer_get_foo", если она не существует if ( !function_exists( 'bologer_get_foo' ) ) { function bologer_get_foo() { return get_option( 'bologer_option_foo' ); } }
OOP
Более простой способ избежать проблем с именами — это использовать классы в вашем плагине.
В таком случае, вам нужно лишь проверить существование класса. Методы внутри уже не играют никакой роли, их имена конфликтовать не будут.
Пример:
<?php if ( !class_exists( 'Bologer_Plugin' ) ) { class WPOrg_Plugin { public static function init() { register_setting( 'bologer_settings', 'bologer_option_foo' ); } public static function get_foo() { return get_option( 'bologer_option_foo' ); } } Bologer_Plugin::init(); Bologer_Plugin::get_foo(); }
Организация файлов
Корневая папка вашего плагина должна включать в себя основной файл plugin-name.php
, и uninstall.php
, все остальные файлы должны быть раскиданы по папкам где возможно.
Структура папок
Чистая структура папок, помогает вам и тем, кто работает над вашим плагином держать файлы организованными.
Ниже представлен примерный способ организации структуры плагина:
/plugin-name plugin-name.php uninstall.php /languages /includes /admin /js /css /images /public /js /css /images
Архитектура плагина
Архитектура, или организация кода, напрямую зависит от вас и размера вашего плагина.
Для маленьких плагинов, которые немного касаются функций ядра WordPress, шаблонов или других плагинов, нет особого смысла придерживаться сложных структур; об этом стоим задумываться, если вы уверены, что плагин будет больше в коде.
Для крупных плагинов, где много кода, лучше всего использовать классы. Разделить классы и стили и другие сопутствующие файлы. Это поможет вашему коду быть более организованным и читабельным.
Загрузка с условием
Так же важно разделить код, который относиться к админ панели и публичной части (которую видят обычные пользователи). Используйте функцию is_admin(), чтобы установить такое условие.
Пример:
<?php if ( is_admin() ) { // теперь мы только в админ панели require_once( dirname( __FILE__ ) . '/admin/plugin-name-admin.php' ); }
Архитектурные паттерны
Существует несколько основных архетектурных патернов:
- Один файл со всеми функциями
- Один файл с классом, вызванным классом и функциями
- Один файл и к нему относятся один и более классов файлами
Используйте шаблон при разработке
Вместо того, чтобы начать писать плагин с самого начала, вы можете воспользоваться boilterplate. С английского это переводится как шаблон или скелетон. Один из основных плюсов использования — это постоянство и одинаковая структура во всех ваших плагинах. Еще один из плюсов boilerplate — это узнаваемость структуры плагина другими разработчиками, возможно они уже работали с ним и им буде проще помогать в разработке.
Ниже я представляю несколько скелетонов, которые могут вам пригодиться:
- WordPress Plugin Boilerplate: Основа для плагинонаписания в WordPress, простая структура + гайд по использованию.
- WordPress Plugin Bootstrap: Простая bootstrap структура для WordPress плагинов с использованием Grunt, Compass, GIT и SVN.
- WP Skeleton Plugin: Плагин-скелетон, который нацелен на юнит тестирование и использование Composer’а.
- Можете просто вбить в поиск GitHub и найти, что понравится больше всего
И, конечно же, вас никто не заставляет придерживаться точной структуры, вы создатель вашего плагина и только вам решать. У WordPress лишь есть некоторые минимальные правила, которых нужно придерживаться, чтобы ваш плагин попал в официальную репозиторию.