Ця стаття призначена для розробників, які хочуть створити користувацький динамічний тег даних у системі.
Бажаний результат має виглядати так:
Крок 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 зображень, якщо ваш динамічний тег використовується на елементі зображення (контекст зображення). Будь ласка, перегляньте приклад на наших форумах: Динамічні дані не відображаються правильно на елементі зображення