WordPress: лучшие практики при разработке

· WordPress, Основы и Разработка плагинов · 4 мин чтения
AnyComment - Современный виджет комментариев для WordPress

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

Используйте уникальные имена

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

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

Процедурное программирование

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

везде Используйте префикс

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

Проверить на существование

PHP имеет массу вариантов проверить существование переменных, функций и классов. Все варианты перечисленные ниже, возвращают true, если оно существует.

Пример:

<?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 лишь есть некоторые минимальные правила, которых нужно придерживаться, чтобы ваш плагин попал в официальную репозиторию.