Розробка · WordPress · 10 березня 2026

Динамічні таблиці даних на WordPress: автооновлення з API через Elementor

Курси валют, тарифи, наявність товарів, ставки чи будь-які інші дані, що часто змінюються, не варто вбивати в сторінку руками. Розбираємо, як вивести таблицю, що сама підтягує актуальні дані з REST API, кешує їх і рендериться прямо в Elementor — на чистому WordPress без важких плагінів.

WordPress·6 хв читання
Динамічні таблиці даних на WordPress — автооновлення з API через Elementor

Дані з REST API з кешуванням

Основа підходу — отримати дані через REST API, закешувати відповідь (щоб не смикати зовнішній сервіс на кожен перегляд) і відрендерити таблицю через шорткод. Кешування робимо на Transients API — вбудований механізм WordPress. Додайте сніпет у functions.php дочірньої теми:

// Шорткод [dynamic_table] — таблиця даних з REST API з кешем на 1 годину
function sw_dynamic_table_shortcode() {
    $api_url = 'https://api.example.com/v1/rates'; // ваш ендпоінт
    $data = get_transient( 'sw_dynamic_table' );

    if ( false === $data ) {
        $response = wp_remote_get( $api_url, array( 'timeout' => 10 ) );
        if ( is_wp_error( $response ) ) {
            return '<p>Дані тимчасово недоступні. Спробуйте пізніше.</p>';
        }
        $data = json_decode( wp_remote_retrieve_body( $response ), true );
        if ( ! is_array( $data ) ) { $data = array(); }
        set_transient( 'sw_dynamic_table', $data, HOUR_IN_SECONDS );
    }

    // Демо-рядки, якщо API порожнє (заміните на свої дані)
    if ( empty( $data ) ) {
        $data = array(
            array( 'name' => 'Тариф Старт',  'value' => '299 грн/міс', 'updated' => 'сьогодні' ),
            array( 'name' => 'Тариф Бізнес', 'value' => '899 грн/міс', 'updated' => 'сьогодні' ),
        );
    }

    $html  = '<div class="sw-table-wrap"><table class="sw-data-table">';
    $html .= '<thead><tr><th>Назва</th><th>Значення</th><th>Оновлено</th></tr></thead><tbody>';
    foreach ( $data as $row ) {
        // ОБОВ'ЯЗКОВО екрануємо дані з зовнішнього джерела
        $html .= sprintf(
            '<tr><td>%s</td><td>%s</td><td>%s</td></tr>',
            esc_html( $row['name'] ?? '' ),
            esc_html( $row['value'] ?? '' ),
            esc_html( $row['updated'] ?? '' )
        );
    }
    $html .= '</tbody></table></div>';
    return $html;
}
add_shortcode( 'dynamic_table', 'sw_dynamic_table_shortcode' );

Ключова відмінність від «швидких» рішень з інтернету — екранування через esc_html(). Дані приходять із зовнішнього джерела, і якщо вставляти їх у HTML напряму, скомпрометований чи ворожий API відкриває шлях до XSS. Екрануйте завжди.

Впровадження в Elementor

  • Крок 1. Відкрийте сторінку в редакторі Elementor.
  • Крок 2. Перетягніть у потрібну секцію віджет «Шорткод» (Shortcode).
  • Крок 3. Вставте [dynamic_table] у поле віджета.
  • Крок 4. Стилізуйте таблицю під сайт — класи .sw-data-table і .sw-table-wrap задаєте у CSS теми (не забудьте overflow-x:auto на обгортці для мобільних).

Кеш, безпека і типові помилки

Кеш сторінки vs кеш даних. Transient кешує самі дані на годину — це правильно. Але агресивний page cache (WP Rocket, повний кеш LiteSpeed) закешує вже відрендерену сторінку і «заморозить» таблицю до скидання кешу. Якщо потрібна майже реальночасова актуальність — виводьте таблицю через AJAX або зменшуйте TTL і виключайте сторінку з повного кешу.

Ще три речі, які легко пропустити:

  • Тайм-аут і фолбек. Зовнішній API може не відповісти. Завжди обробляйте is_wp_error() і показуйте запасний контент, а не порожнечу чи фатал.
  • Екранування виводу. esc_html() для тексту, esc_url() для посилань — на будь-яких даних не з вашої бази.
  • Не зловживайте зовнішніми даними. Показуйте лише те, на що маєте право, і чого користувач очікує — таблиця має інформувати, а не вводити в оману.

Бонус: інтерактивний калькулятор ROI

Той самий принцип «рахуємо на льоту» працює і для інтерактивних елементів. Ось простий калькулятор рентабельності рекламної кампанії — порахуйте прямо тут:

Калькулятор ROI кампанії

Конверсій 0

Дохід 0 ₴

Чистий прибуток 0 ₴

ROI 0%

Часті питання

Ні. Достатньо шорткоду в functions.php дочірньої теми і вбудованих функцій WordPress (wp_remote_get, Transients API). Плагіни-конструктори таблиць потрібні хіба що для складного редагування контент-менеджером без коду.

Керується часом життя transient — у прикладі це HOUR_IN_SECONDS (1 година). Зменшіть значення для частіших оновлень або збільшіть, щоб рідше смикати зовнішній API. Для реального часу використовуйте AJAX-підвантаження.

Так, якщо екранувати вивід. Пропускайте кожне значення через esc_html() (текст) чи esc_url() (посилання) перед вставкою в HTML. Це закриває ризик XSS, якщо джерело даних колись віддасть шкідливий вміст.

Потрібна динамічна таблиця чи інтеграція з API?

SEOWORK підключає WordPress-сайти до зовнішніх джерел даних, налаштовує кешування й безпечний вивід. Розкажіть про задачу — повернемось із рішенням.

Поділитися статтею




Розбори кіберзагроз від SEOWORK

Одна практична стаття на тиждень — як не купитися на фішинг, захистити акаунти й дані. У подарунок одразу памʼятка у PDF.