Створіть свої власні елементи

Дитяча тема child theme, яку ви можете завантажити з вашого облікового запису, містить простий налаштований елемент для демонстраційних цілей. У статті нижче пояснюється більш детально, як створити власні елементи програмно (Esl 1.4+).

Створення власних елементів за допомогою Esl слідує шаблону, подібному до того, як ви створюєте віджети WordPress. Ви починаєте з розширення класу EslElement і заповнюєте необхідні властивості та методи для вашого елемента.

Спочатку створіть новий файл element-test.php у кореневій папці вашої дитячої теми Esl.

Порожній клас елемента

<?php// element-test.phpif ( ! defined( 'ABSPATH' ) ) exit; // Вихід, якщо доступ здійснено безпосередньоclass Prefix_Element_Test extends EslElement {// Властивості елементаpublic $category     = '';public $name         = '';public $icon         = '';public $css_selector = '';public $scripts      = [];public $nestable     = false; // true || @since 1.5// Методи: Специфічні для двигунаpublic function get_label() {}public function get_keywords() {}public function set_control_groups() {}public function set_controls() {}// Методи: Специфічні для фронтендуpublic function enqueue_scripts() {}public function render() {}}

Давайте розберемо властивості та методи елемента двигуна:

$category Назва категорії (усі літери нижнього регістру, без пробілів). Використовуйте будь-які з попередньо визначених категорій елементів: general, media, social, header, wordpress і post. Або призначте свою власну категорію елемента. При налаштуванні власної категорії переконайтеся, що ви надаєте рядок категорії, що підлягає перекладу, для механізму за допомогою фільтра: esl/engine/i18n
$name Унікальний ідентифікатор елемента (усі літери нижнього регістру, без пробілів). Щоб уникнути конфліктів з іншими елементами, будь ласка, додайте префікс до імені вашого елемента, наприклад: prefix-element-test.
$icon CSS клас шрифтової іконки. Esl включає такі шрифти іконок. Використовуйте будь-який CSS клас шрифтової іконки, щоб представити ваш елемент у панелі механізму:

$css_selector За замовчуванням усі налаштування контролю CSS застосовуються до обгортки елемента:  .esl-element-wrapper. Якщо ви хочете, щоб CSS селектор за замовчуванням націлювався на дочірній HTML елемент, встановіть цей селектор тут.
$nestable Не використовуйте для простих елементів. Встановіть true, щоб створити вкладений елемент.
$scripts Масив скриптів JavaScript, які виконуються, коли елемент відображається на фронтенді або оновлюється в механізмі. Наприклад, елемент Counter використовує скрипт з назвою “eslCounter” (визначений у frontend.min.js).
Щоб завантажити цей скрипт, ми використовуємо: public $scripts = ['eslCounter'];
Будь ласка, додайте префікс до всіх ваших скриптів. Наприклад: prefixElementTest
get_label() Повертає локалізовану мітку елемента.
get_keywords() Масив рядків, які при зіставленні під час пошуку елемента відображають елемент у результатах пошуку.
set_control_groups() За замовчуванням усі елементи керування показуються без групування в панелі механізму під вкладкою “Контент”. Визначте власні групи керування для ваших елементів, встановивши наступні властивості для кожної групи керування: 

  • title – Локалізована назва групи керування
  • tab – Встановіть або “content”, або “style”
set_controls() Визначте елементи керування елемента. Для огляду всіх наявних елементів керування та їхніх налаштувань відвідайте: Елементи керування
enqueue_scripts() Завантажте специфічні для елемента скрипти та стилі. Вони завантажуються тільки на сторінках, де використовується цей елемент. Результат — краща продуктивність. Приклад: wp_enqueue_script( 'prefix-element-test', get_template_directory_uri() . '/js/custom.js', ['jquery'], '1.0', true );
render() Відображає HTML елемента. Визначте HTML атрибути через  $this->set_attribute() та виведіть їх через $this->render_attribute()
set_attribute( $key, $attribute, $value ) Допоміжна функція для встановлення HTML атрибутів для будь-якого HTML тегу. $key слугує унікальним ідентифікатором для цього HTML тегу. $attribute — це назва HTML атрибута. $value — це рядок або масив, що містить значення атрибута(ів).
render_attributes( $key ) Допоміжна функція для відображення HTML атрибутів, визначених за допомогою $this->set_attribute(). $key слугує унікальним ідентифікатором для цього HTML тегу.
render_dynamic_data_tag( $tag, $context, $args ) Допоміжна функція для відображення динамічних тегів даних усередині функції рендерингу, використовуючи $this->render_dynamic_data_tag(...). Приклад $tag це {post_title}. Використання цієї допоміжної функції встановлює правильний ідентифікатор публікації в залежності від середовища, в якому рендериться елемент.
render_dynamic_data( $content ) Допоміжна функція для відображення вмісту (рядка), який може містити динамічні теги даних. Використовуйте цю допоміжну функцію всередині функції рендерингу, викликаючи $this->render_dynamic_data(...). Використання цієї допоміжної функції встановлює правильний ідентифікатор публікації в залежності від середовища, в якому рендериться елемент.

З версії Esl 1.4 вам потрібно налаштувати та відобразити атрибут _root на зовнішньому тегу вашого елемента, оскільки обгортка за замовчуванням була видалена з причин продуктивності.

Давайте заповнимо властивості та методи нашого елемента деякими даними:

<?php// element-test.phpif ( ! defined( 'ABSPATH' ) ) exit; // Вихід, якщо доступ безпосередньоclass Prefix_Element_Test extends EslElement {// Властивості елементаpublic $category     = 'general'; // Використовуйте попередньо визначену категорію елемента 'general'public $name         = 'prefix-test'; // Переконайтесь, що ви префіксировали ваші елементиpublic $icon         = 'ti-bolt-alt'; // Клас шрифта іконки Themifypublic $css_selector = '.prefix-test-wrapper'; // За замовчуванням CSS-селекторpublic $scripts      = ['prefixElementTest']; // Скрипт(и), які виконуються, коли елемент відображається на фронтенді або оновлюється в системі// Повернути локалізовану мітку елементаpublic function get_label() {return esc_html__( 'Тестовий елемент', 'esl' );}// Встановити контрольні групи системиpublic function set_control_groups() {$this->control_groups['text'] = [ // Унікальний ідентифікатор групи (малими літерами, без пробілів)'title' => esc_html__( 'Текст', 'esl' ), // Локалізована назва контрольної групи'tab' => 'content', // Встановіть або "content", або "style"];$this->control_groups['settings'] = ['title' => esc_html__( 'Налаштування', 'esl' ),'tab' => 'content',];}// Встановити елементи управління системиpublic function set_controls() {$this->controls['content'] = [ // Унікальний ідентифікатор управління (малими літерами, без пробілів)'tab' => 'content', // Вкладка управління: зміст/стиль'group' => 'text', // Показати під групою керування'label' => esc_html__( 'Зміст', 'esl' ), // Мітка керування'type' => 'text', // Тип керування'default' => esc_html__( 'Зміст тут ..', 'esl' ), // Налаштування за замовчуванням];$this->controls['type'] = ['tab' => 'content','group' => 'settings','label' => esc_html__( 'Тип', 'esl' ),'type' => 'select','options' => ['info' => esc_html__( 'Інформація', 'esl' ),'success' => esc_html__( 'Успіх', 'esl' ),'warning' => esc_html__( 'Попередження', 'esl' ),'danger' => esc_html__( 'Небезпека', 'esl' ),'muted' => esc_html__( 'Приглушений', 'esl' ),],'inline' => true,'clearable' => false,'pasteStyles' => false,'default' => 'info',];}// Завантажити стилі та скрипти елементаpublic function enqueue_scripts() {wp_enqueue_script( 'prefix-test-script' );}// Відобразити HTML елементаpublic function render() {// Встановити атрибути елемента$root_classes[] = 'prefix-test-wrapper';if ( ! empty( $this->settings['type'] ) ) {$root_classes[] = "color-{$this->settings['type']}";}// Додати атрибут 'class' до кореневого тегу елемента$this->set_attribute( '_root', 'class', $root_classes );// Відобразити HTML елемента// Атрибут '_root' є обов'язковим з моменту Esl 1.4 (містить ID елемента, клас, тощо)echo "<div {$this->render_attributes( '_root' )}>"; // Атрибути кореневого елементаif ( ! empty( $this->settings['content'] ) ) {echo "<div>{$this->settings['content']}</div>";}echo '</div>';}}

Ви можете переглянути всі елементи управління на: https://academy.eslengine.io/topic/controls/

Всі налаштування елементів зберігаються в $this->settings. Щоб переглянути налаштування елементів, ви можете вивести їх на екран так: var_dump( $this->settings ); у функції render().

Завантажте та зареєструйте свій елемент

Після створення вашого користувацького елемента вам потрібно завантажити та зареєструвати його. Відкрийте functions.php вашої дочірньої теми Esl і скопіюйте та вставте наступний код:

/*** Зареєструйте користувацькі елементи*/add_action( 'init', function() {$element_files = [__DIR__ . '/element-test.php',];foreach ( $element_files as $file ) {EslElements::register_element( $file );}}, 11 );

Метод register_element приймає 3 аргументи:

  • $file (обов’язковий): Повний шлях до PHP файлу користувацького елемента на сервері
  • $name (необов’язковий): Рядок, що містить назву користувацького елемента (наприклад: prefix-element-test)
  • $element_class (необов’язковий): Рядок, що містить назву класу елемента (наприклад: Prefix_Element_Test), який повинен походити від класу елемента Esl (EslElement)

Примітка: Використання аргументів $name та $element_class покращить продуктивність завантаження.