2.5 Лучшие практики

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

Избегайте конфликтов имен

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

К счастью, вы можете избежать именования коллизий, используя методы ниже.

Процедурные

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

На переменные, которые определены внутри функций или классов, это не влияет.

Префикс для всего

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

Проверка существующих реализаций

PHP предоставляет ряд функций для проверки существования переменных, функций, классов и констант. Все они вернут истину (true), если сущность существует.

Пример

// создаем функцию "wporg_init" если она еще не существует
if ( !function_exists( 'wporg_init' ) ) {
    function wporg_init() {
        register_setting( 'wporg_settings', 'wporg_option_foo' );
    }
}
 
// создаем функцию "wporg_get_foo" если она еще несуществует
if ( !function_exists( 'wporg_get_foo' ) ) {
    function wporg_get_foo() {
        return get_option( 'wporg_option_foo' );
    }
}

ООП

Более простой способ решения проблемы коллизии имен – использовать класс для кода вашего плагина.

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

Пример

if ( !class_exists( 'WPOrg_Plugin' ) ) {
    class WPOrg_Plugin
    {
        public static function init() {
            register_setting( 'wporg_settings', 'wporg_option_foo' );
        }
 
        public static function get_foo() {
            return get_option( 'wporg_option_foo' );
        }
    }
 
    WPOrg_Plugin::init();
    WPOrg_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().

Например:

if ( is_admin() ) {
    // мы в режиме админа
    require_once __DIR__ . '/admin/plugin-name-admin.php';
}

Архитектурные паттерны

Хотя существует несколько возможных архитектурных шаблонов, их можно сгруппировать в три варианта:

Объясненные паттернов архитектуры

Конкретные реализации более сложной из вышеперечисленных организаций кода уже были написаны в виде учебных пособий и слайдов:

Стартовые точки Boilerplate (шаблона)

Вместо того, чтобы начинать с нуля для каждого нового плагина, который вы пишете, вы можете начать с шаблона (boilerplate). Одним из преимуществ использования шаблона является согласованность между вашими плагинами. Boilerplates также облегчают другим людям добавлять свой код, если вы используете шаблон, с которым они уже знакомы.

Это также служит дополнительными примерами различных, но сопоставимых архитектур.

  • WordPress Plugin Boilerplate: Основа для разработки плагинов WordPress, целью которой является предоставление четкого и последовательного руководства по созданию ваших плагинов.
  • WordPress Plugin Bootstrap: Базовый загрузчик для разработки плагинов WordPress с использованием Grunt, Compass, GIT и SVN.
  • WP Skeleton Plugin: Skeleton плагин, который фокусируется на модульных тестах и использовании композера для разработки.
  • WP CLI Scaffold: Команда Scaffold WP CLI создает каркасный плагин с такими параметрами, как файлы конфигурации CI.

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

Наверх ↑