# Шаблон

Создаем шаблон для будущего плагина на странице - <https://wppb.me/>

Этот шаблон копируем в папку плагинов wordpress.

## Файловая структура

```c
/my-plugin-name
    /admin
        class-wp-clear-admin.php
        index.php
    /css
        wp-clear-admin.css
    /js
        wp-clear-admin.js
    /includes
        class-wp-clear.php
        class-wp-clear-activator.php
        class-wp-clear-deactivator.php
        class-wp-clear-i18n.php
        class-wp-clear-loader.php
        index.php
    /languages    
        my-plugin.pot
    /public
        /css
            my-plugin-public.css    
        /js
            my-plugin-public.js
        /partials
            my-plugin-public-display.php
        class-my-plugin-public.php    
        index.php        
    index.php
    LICENSE.txt
    my-plugin.php
    README.txt
    uninstall.php
```

### Папка 'admin'&#xD;

В папке admin располагается весь код административной части, включая папки CSS, JS и других компонентов.&#x20;

`css/my-plugin-admin.css` - Файл для стилей страницы настроек плагина.

`js/my-plugin-admin.js` - Файл для js страницы настроек плагина.

`class-my-plugin-admin.php` - Этот файл содержит класс для создания административной части.

`my-plugin-admin-display.php` - Файл содержит HTML код страницы настроек плагина.

### Папка 'includes'&#xD;

`class-my-plugin.php` - Основной файл с классом для работы плагина, куда добавляются все действия и фильтры.

`class-my-plugin-activator.php` - Файл содержит класс, необходимый для запуска во время активации плагина.

`class-my-plugin-desactivator.php` - Файл содержит класс для деактивации плагина.

`class-my-plugin-i18n.php` - Файл интернационализации.

`class-my-plugin-loader.php` - Файл загрузчика, который регистрирует все события, фильтры и хуки.

### Папка 'languages'

`my-plugin.pot` - Файл локализации по умолчанию пуст.&#x20;

### Папка 'public'

`css/my-plugin-admin.css` - Файл для стилей публичной части страницы плагина.

`js/my-plugin-admin.js` - Файл для js публичной части страницы настроек плагина.

`/partials/my-plugin-public-display.php` - Файл содержит HTML код страницы если плагин внедряет в шаблон сайта какие либо данные.

`class-my-plugin-public.php` - Файл содержит класс для публичной части плагина. В методах класса добавляются события и фильтры, необходимые для реализации функциональности плагина.

### Дополнительные файлы

Список и краткое описание файлов расположенных в корневой папке плагина:

`LICENCE.txt` - Файл лицензии GPL-2.

`README.txt` - Файл описания плагина и его установки.

`uninstall.php` - Файл удаления плагина из WordPress.

`my-plugin.php` - Файл начальной загрузки плагина. Тут расположена информация о плагине. Версия, автор и другие данные

## Описание классов

Название классов может быть произвольным. Для понимания выбран класс `my-plugin`

```c
/my-plugin-name
    /admin
        class-wp-clear-admin.php - {
        Здеь подключаем меню и прочий доступ к страницам в административной части wordpress
            1. Подключаем файлы стилей и js для административной страницы
            2. Описываем логику и выводим административную страницу  
        }
        
    /includes
        class-wp-clear.php - {
            Основной класс плагина
            1. Объявляем все переменные и функции.
            2. Вызываем функции для подключения всех зависимостей (loader, activator,
            deactivator, i18n)
            3. Объявляем класс для перевода (i18n.php) и через loader регистрируем событие
            4. Объявляем класс административной части (admin.php) 
            и через loader регистрируем хуки и события
            5. Объявляем класс пользовательской части (public.php) 
            и через loader регистрируем хуки и события
        }
        class-wp-clear-activator.php - {
            Можно использовать в качестве объявления БД и записи 
        }
        class-wp-clear-deactivator.php
        class-wp-clear-i18n.php
        class-wp-clear-loader.php - {
            Класс для удобного (быстрого) объявления Хуков и Событий.
        }
        
    /languages    
        my-plugin.pot - Файл перевода
    /public
        /partials
            my-plugin-public-display.php - Публичная страница
        class-my-plugin-public.php - {
        1. Подключаем файлы стилей и js для публичной страницы
        2. Описываем логику и выводим публичну страницу    
   
    my-plugin.php - {
        0. Вносим описание плагина
        1. Подключаем классы активации\деактивации, регистриреум их через хуки
        2. подключаем основной класс плагина и запускаем на выполнение
    }
    uninstall.php - {
        1. Здесь описываем всю логику при удалении плагина
    }
```

### my-plugin

"Главный" класс для работы с будущим плагином. В нем обрабатываются общие для административной и публичной части операции.

{% tabs %}
{% tab title="Переменные" %}

* loader - для определения и доступа к классу `loader`&#x20;
* plugin\_name - название плагина
* version - версия плагина
  {% endtab %}

{% tab title="Фнукции" %}

* load\_dependencies() - загружает исполнительные файлы дополнительных классов
* set\_locale - объявляет класс для работы с переводами
* define\_admin\_hooks - объявляет хуки и действия для административной части  &#x20;
* define\_public\_hooks - объявляет хуки и действия для пользовательской части&#x20;
* run - в данном случай вызывает функцию `run` класса `loader`
* get\_plugin\_name - возвращает имя плагина (для вывода например)
* get\_loader -&#x20;
* get\_version - возвращает версию плагина
  {% endtab %}
  {% endtabs %}

### my-plugin\_loader

Класс для быстрого объявления и задействования действий и фильтров

{% tabs %}
{% tab title="Переменные" %}

* actions - массив действий
* filters - массив фильтров
  {% endtab %}

{% tab title="Функции" %}

* add - для быстрого преобразования в массив входных данных
* add\_action - для заполнения массива "действий"&#x20;
* add\_filter - для заполнения массива "фильтров"
* run - объявление через `add_action` заранее добавленных фильтров и действий
  {% endtab %}
  {% endtabs %}

### my-plugin-i18n

Класс для поддержки переводов

{% tabs %}
{% tab title="Функции" %}

* load\_plugin\_textdomain - Загружает файл с переводами&#x20;
  {% endtab %}

{% tab title="Second Tab" %}

{% endtab %}
{% endtabs %}

### my-plugin-activator

Класс для активации плагина

{% tabs %}
{% tab title="Функции" %}

* activate - выполняется при активации плагина
  {% endtab %}
  {% endtabs %}

### my-plugin-deactivator

Класс для деактивации плагина

{% tabs %}
{% tab title="Функции" %}

* deactivate - выполняется при деактивации плагина
  {% endtab %}
  {% endtabs %}

### my-plugin-admin

Класс административной части. Здесь может быть добавлено объявление меню и прочего.

{% tabs %}
{% tab title="Функции" %}

* enqueue\_styles - подключение уникальных стилей административной страницы
* enqueue\_scripts - подключение уникальных скриптов js административной страницы&#x20;
  {% endtab %}
  {% endtabs %}

### my-plugin-public

Класс публичной части.

{% tabs %}
{% tab title="Функции" %}

* enqueue\_styles - подключение уникальных стилей пользовательской страницы
* enqueue\_scripts - подключение уникальных скриптов js пользовательской  страницы&#x20;
  {% endtab %}
  {% endtabs %}
