Как создать динамические таблицы в WordPress с помощью шорткода

Зачем нужны динамические таблицы в WordPress

Таблицы — отличный способ структурировать и визуально упорядочить данные на сайте. Часто требуется, чтобы таблицы были не просто статичными, а динамическими — например, с возможностью фильтрации, сортировки или загрузки из базы данных. Особенно это актуально для сайтов с большим объемом информации, таких как каталоги, отчеты или списки товаров.

В WordPress стандартными средствами создать динамические таблицы сложно, поэтому приходится обращаться к шорткодам и плагинам. В этой статье мы разберем, как написать собственный шорткод для генерации динамической таблицы, а также рассмотрим полезные плагины с интеграцией.

Создание собственного шорткода для динамической таблицы

Подготовка функции шорткода

Для начала создадим функцию, которая будет генерировать HTML таблицу на основе массива данных. Код нужно добавить в файл functions.php вашей темы или в отдельный плагин.

function wpboard_dynamic_table_shortcode($atts) {
    // Разбор атрибутов шорткода
    $atts = shortcode_atts(array(
        'data' => '', // JSON или ID источника
    ), $atts, 'wpboard_table');

    // Пример данных (в реальных условиях загружайте из базы или API)
    $data = json_decode($atts['data'], true);

    if (empty($data) || !is_array($data)) {
        return '<p>Нет данных для отображения</p>';
    }

    $output = '<table class="wpboard-dynamic-table"><thead><tr>';
    // Заголовки таблицы
    foreach (array_keys($data[0]) as $header) {
        $output .= '<th>' . esc_html($header) . '</th>';
    }
    $output .= '</tr></thead><tbody>';

    // Строки данных
    foreach ($data as $row) {
        $output .= '<tr>';
        foreach ($row as $cell) {
            $output .= '<td>' . esc_html($cell) . '</td>';
        }
        $output .= '</tr>';
    }

    $output .= '</tbody></table>';

    return $output;
}
add_shortcode('wpboard_table', 'wpboard_dynamic_table_shortcode');

Теперь вы можете вставить в пост шорткод с JSON-данными, например:

[wpboard_table data='[{"Имя":"Иван","Возраст":30,"Город":"Москва"},{"Имя":"Ольга","Возраст":25,"Город":"Санкт-Петербург"}]']

Обработка загрузки данных из произвольного источника

Вместо передачи JSON напрямую, можно расширить шорткод для загрузки данных из произвольной таблицы базы данных или REST API, что позволит создавать более гибкие динамические таблицы.

Пример загрузки из таблицы wp_custom_data:

function wpboard_dynamic_table_shortcode($atts) {
    global $wpdb;
    $atts = shortcode_atts(array('source' => 'custom_data'), $atts, 'wpboard_table');
    if ($atts['source'] === 'custom_data') {
        $rows = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}custom_data", ARRAY_A);
        if (empty($rows)) {
            return '<p>Данные не найдены</p>';
        }
        // Формируем таблицу аналогично
        // ... (код из предыдущего примера) ...
    }
}

Добавление интерактивности: сортировка и фильтры

Чтобы таблица была удобной для пользователей, стоит добавить сортировку по столбцам и фильтры. Для этого можно использовать JavaScript-библиотеки, например, DataTables.

Подключите скрипты и стили DataTables в вашей теме или плагине, например:

function wpboard_enqueue_scripts() {
    wp_enqueue_style('datatables-css', 'https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css');
    wp_enqueue_script('jquery');
    wp_enqueue_script('datatables-js', 'https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js', array('jquery'), null, true);

    wp_add_inline_script('datatables-js', 'jQuery(document).ready(function($) { $(".wpboard-dynamic-table").DataTable({"language": {"url": "//cdn.datatables.net/plug-ins/1.13.4/i18n/ru.json"}}); });');
}
add_action('wp_enqueue_scripts', 'wpboard_enqueue_scripts');

После этого все таблицы с классом wpboard-dynamic-table станут интерактивными с возможностью сортировки и поиска.

Популярные плагины для создания и управления таблицами в WordPress

Если вы не хотите писать код, можно использовать готовые решения. Вот несколько плагинов с поддержкой динамических таблиц:

  • TablePress — самый популярный плагин для создания таблиц с удобным интерфейсом, поддержкой импорта/экспорта и расширениями для сортировки и фильтрации.
  • WP Table Builder — визуальный конструктор таблиц с drag-and-drop, подходит для создания сложных макетов.
  • Data Tables Generator by Supsystic — плагин с мощной функциональностью, включая AJAX-загрузку данных, пагинацию и фильтры.

Для интеграции с вашим сайтом можно добавить шорткод из этих плагинов в любые посты и страницы.

Решение типичных проблем при работе с динамическими таблицами

Проблема 1: Большие объемы данных замедляют загрузку

Если таблица содержит сотни или тысячи строк, загрузка и рендеринг могут сильно тормозить. Чтобы решить это, используйте серверную обработку данных в DataTables или пагинацию на сервере. В WordPress можно реализовать AJAX-обработчик, который будет отдавать порции данных по запросу.

Проблема 2: Конфликты JavaScript

Иногда на сайте могут конфликтовать скрипты разных плагинов или темы, что ломает работу таблицы. В таком случае проверьте консоль браузера на наличие ошибок, отключайте по очереди плагины для выявления конфликтов. Для DataTables важно правильно подключать jQuery и скрипты в нужном порядке.

Проблема 3: Отсутствие стилизации таблиц

Чтобы таблица выглядела аккуратно и вписывалась в дизайн сайта, добавьте собственные CSS-правила для класса wpboard-dynamic-table или используйте стили плагинов. Например:

.wpboard-dynamic-table {
    width: 100%;
    border-collapse: collapse;
}
.wpboard-dynamic-table th, .wpboard-dynamic-table td {
    border: 1px solid #ddd;
    padding: 8px;
}
.wpboard-dynamic-table th {
    background-color: #f4f4f4;
    text-align: left;
}

Использование плагина Clearfy Pro для оптимизации таблиц

Если вы применяете динамические таблицы вместе с другими инструментами, полезно использовать Clearfy Pro для оптимизации загрузки скриптов и стилей. Clearfy Pro позволяет отключать ненужные скрипты на страницах без таблиц, что ускорит сайт и снизит нагрузку.

Также Clearfy умеет управлять кешированием и безопасностью, что улучшит стабильность работы динамических элементов.

Как удалить все посты по автору в WordPress: практическое руководство
13.11.2025
Как использовать метод обновления transient в WordPress для кеширования данных
08.12.2025
Как отключить AJAX в WooCommerce для улучшения производительности
27.03.2026
Как удалить автоматически создаваемые категории в WordPress
03.04.2026
Как избежать проблем с перенаправлениями в WordPress
04.01.2026