Створіть свій власний динамічний тег даних

Ця стаття призначена для розробників, які хочуть створити користувацький динамічний тег даних у системі.

Бажаний результат має виглядати так:

Користувацький динамічний тег під назвою “Мої Динамічні Дані”

Крок 1: Зареєструйте тег через фільтр: esl/dynamic_tags_list

Використовуйте фільтр esl/dynamic_tags_list, щоб відобразити ваш користувацький динамічний тег даних у системі.

add_filter( 'esl/dynamic_tags_list', 'add_my_tag_to_engine' );function add_my_tag_to_engine( $tags ) {// Переконайтеся, що ваш тег унікальний (краще префіксувати його)$tags[] = ['name'  => '{my_dd_tag}','label' => 'Мої Динамічні Дані','group' => 'Група Моїх Динамічних Даних',];return $tags;}

Крок 2: Підключіться до кількох фільтрів

1) esl/dynamic_data/render_tag

Цей фільтр буде використовуватися, коли викликається EslIntegrationsDynamic_DataProviders::render_tag() для парсингу конкретного тегу.

add_filter( 'esl/dynamic_data/render_tag', 'get_my_tag_value', 10, 3 );function get_my_tag_value( $tag, $post, $context = 'text' ) {// $tag - це ім'я тегу без дужок// Шукаємо тільки динамічний тег my_dd_tagif ( $tag !== 'my_dd_tag' ) {return $tag;}// Виконайте вашу логіку тут, слід визначити функцію run_my_dd_tag_logic()$value = run_my_dd_tag_logic();return $value;}function run_my_dd_tag_logic() {// Виконайте вашу логіку тут$my_value = 'Значення моїх динамічних даних:';return $my_value;}

Якщо ви плануєте приймати аргумент, наприклад “my_dd_tag:arg1“, вам, можливо, доведеться відповідним чином налаштувати логіку. Ось базовий приклад, що використовує PHP логіку. Для більш складних сценаріїв ви можете адаптувати логіку на ваш розсуд:

add_filter( 'esl/dynamic_data/render_tag', 'get_my_tag_value', 10, 3 );function get_my_tag_value( $tag, $post, $context = 'text' ) {// $tag - це ім'я тегу без дужок// Шукаємо тільки динамічний тег, що починається з my_dd_tag:if ( strpos( $tag, 'my_dd_tag:' ) === false ) {return $tag;}// Отримуємо аргумент$argument = str_replace( 'my_dd_tag:', '', $tag );// Виконайте вашу логіку тут, слід визначити функцію run_my_dd_tag_logic() $value = run_my_dd_tag_logic( $argument );return $value;}function run_my_dd_tag_logic($argument) {// Виконайте вашу логіку тут$my_value = 'Значення моїх динамічних даних: ' . $argument;return $my_value;}

2) esl/dynamic_data/render_content та esl/frontend/render_data

Ці фільтри будуть використовуватися, коли викликається EslIntegrationsDynamic_DataProviders::render_content() для парсингу рядків, які можуть містити різні динамічні теги в контенті. Одна з функцій, що виконує цю дію, це esl_render_dynamic_data().

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

add_filter( 'esl/dynamic_data/render_content', 'render_my_tag', 10, 3 );add_filter( 'esl/frontend/render_data', 'render_my_tag', 10, 2 );function render_my_tag( $content, $post, $context = 'text' ) {// $content може містити HTML та інші динамічні теги// Шукайте лише динамічний тег {my_dd_tag}if ( strpos( $content, '{my_dd_tag}' ) === false ) {return $content;}// Виконайте свою власну логіку тут, потрібно визначити функцію run_my_dd_tag_logic() $my_value = run_my_dd_tag_logic();// Замініть тег на значення, яке потрібно відобразити$content = str_replace( '{my_dd_tag}', $my_value, $content );return $content;}

Якщо ваш динамічний тег приймає аргумент, розгляньте наступний приклад:

add_filter( 'esl/dynamic_data/render_content', 'render_my_tag', 10, 3 );add_filter( 'esl/frontend/render_data', 'render_my_tag', 10, 2 );function render_my_tag( $content, $post, $context = 'text' ) {// $content - це вміст елемента, включаючи інші динамічні теги, HTML тощо.// Шукайте лише вміст, що починається з {my_dd_tag:if ( strpos( $content, '{my_dd_tag:' ) === false ) {return $content;}// Regex для відповідності my_dd_tag: тегpreg_match_all( '/{(my_dd_tag:[^}]+)}/', $content, $matches );// Немає нічого згрупованого в regex, поверніть оригінальний вмістif ( empty( $matches[0] ) ) {return $content;}foreach ( $matches[1] as $key => $match ) {$tag = $matches[0][ $key ];// Отримайте значення динамічних даних, $match - це ім'я тега без фігурних дужок// Можна повторно використовувати функцію get_my_tag_value, створену раніше$value   = get_my_tag_value( $match, $post, $context );// Замініть тег на перетворене значення$content = str_replace( $tag, $value, $content );}return $content;}

Примітка: Будь ласка, переконайтеся, що ви повертаєте масив з ID зображень, якщо ваш динамічний тег використовується на елементі зображення (контекст зображення). Будь ласка, перегляньте приклад на наших форумах: Динамічні дані не відображаються правильно на елементі зображення