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

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

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

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

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

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

Регистрация шорткода в WordPress

Для начала создадим функцию, которая будет генерировать HTML таблицы. Например, возьмём данные из кастомной таблицы базы данных wp_news_articles с полями id, title, author и date. Наша функция wpnews_generate_dynamic_table выполнит SQL запрос и вернёт HTML с таблицей.

function wpnews_generate_dynamic_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'news_articles';
    $results = $wpdb->get_results("SELECT id, title, author, date FROM {$table_name} ORDER BY date DESC");
    if (empty($results)) {
        return '<p>Данные не найдены.</p>';
    }
    $output = '<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse; width: 100%;">';
    $output .= '<thead><tr><th>ID</th><th>Заголовок статьи</th><th>Автор</th><th>Дата публикации</th></tr></thead>';
    $output .= '<tbody>';
    foreach ($results as $row) {
        $output .= "<tr><td>{$row->id}</td><td>{$row->title}</td><td>{$row->author}</td><td>{$row->date}</td></tr>";
    }
    $output .= '</tbody></table>';
    return $output;
}
add_shortcode('wpnews_dynamic_table', 'wpnews_generate_dynamic_table');

Теперь в любом месте содержимого сайта можно вставить [wpnews_dynamic_table] — и отобразится таблица с последними статьями из нашей базы.

Подключение и создание таблицы в базе данных

Чтобы пример работал, нужно создать таблицу wp_news_articles. Для этого можно использовать функцию активации плагина или вставить SQL вручную через phpMyAdmin:

CREATE TABLE wp_news_articles (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  author VARCHAR(100) NOT NULL,
  date DATE NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Далее вставьте несколько записей для теста.

Добавление параметров в шорткод для фильтрации и сортировки

Фильтрация по автору и сортировка по дате

Чтобы сделать таблицу более гибкой, добавим в шорткод атрибуты author и order. Это позволит выводить статьи конкретного автора и менять порядок сортировки.

function wpnews_generate_dynamic_table($atts) {
    global $wpdb;
    $atts = shortcode_atts(array(
        'author' => '',
        'order' => 'DESC'
    ), $atts, 'wpnews_dynamic_table');

    $table_name = $wpdb->prefix . 'news_articles';
    $author_filter = '';
    $order = strtoupper($atts['order']) === 'ASC' ? 'ASC' : 'DESC';

    if (!empty($atts['author'])) {
        $author = sanitize_text_field($atts['author']);
        $author_filter = $wpdb->prepare("WHERE author = %s", $author);
    }

    $query = "SELECT id, title, author, date FROM {$table_name} {$author_filter} ORDER BY date {$order}";
    $results = $wpdb->get_results($query);

    if (empty($results)) {
        return '<p>Данные не найдены.</p>';
    }

    $output = '<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse; width: 100%;">';
    $output .= '<thead><tr><th>ID</th><th>Заголовок статьи</th><th>Автор</th><th>Дата публикации</th></tr></thead>';
    $output .= '<tbody>';
    foreach ($results as $row) {
        $output .= "<tr><td>{$row->id}</td><td>{$row->title}</td><td>{$row->author}</td><td>{$row->date}</td></tr>";
    }
    $output .= '</tbody></table>';

    return $output;
}
add_shortcode('wpnews_dynamic_table', 'wpnews_generate_dynamic_table');

Пример использования:

  • [wpnews_dynamic_table author="Иванов" order="ASC"] — таблица с статьями автора Иванов, отсортированная по дате по возрастанию.

Использование популярных плагинов для динамических таблиц в WordPress

TablePress — универсальный плагин для таблиц

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

Чтобы добавить динамический контент, можно использовать фильтры и хуки TablePress, либо создавать таблицы программно. Плагин очень удобен для создания таблиц с фиксированными данными.

WPDataTables — мощный инструмент для больших данных

WPDataTables предоставляет расширенные возможности по работе с большими данными: подключение к базе данных, импорт из Excel/CSV, создание интерактивных таблиц с фильтрами и поиском. Плагин платный, но очень полезен, если нужно создавать сложные дашборды и отчёты.

Для интеграции данных из кастомных таблиц можно использовать API плагина и создавать динамические таблицы с минимальными усилиями.

Оптимизация и безопасность при работе с динамическими таблицами

Санитизация и подготовка запросов

При работе с данными из базы важно правильно обрабатывать входящие параметры, чтобы избежать SQL-инъекций. В примерах выше используется $wpdb->prepare и sanitize_text_field, что обеспечивает безопасность.

Не стоит вставлять в запросы напрямую данные от пользователей без подготовки. Лучше использовать встроенные функции WordPress.

Кеширование результатов

Если таблица выводится часто и данные меняются не так часто, имеет смысл кешировать результаты запросов. Можно использовать транзиенты WordPress:

function wpnews_generate_dynamic_table($atts) {
    global $wpdb;
    $atts = shortcode_atts(array('author' => '', 'order' => 'DESC'), $atts, 'wpnews_dynamic_table');
    $cache_key = 'wpnews_dyn_table_' . md5(json_encode($atts));
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }
    // ...здесь обычная логика запроса и генерации таблицы...
    $output = '...'; // сгенерированный HTML
    set_transient($cache_key, $output, HOUR_IN_SECONDS);
    return $output;
}

Это снизит нагрузку на базу при большом числе обращений.

Вывод

Динамические таблицы в WordPress с помощью шорткодов — мощный инструмент для удобного отображения данных. С помощью простого кода можно быстро сделать таблицу с фильтрами и сортировкой, а с помощью плагинов — расширить функционал до сложных отчётов и интерактивных списков.

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

Как удалить все комментарии с одного поста в WordPress
06.12.2025
Как создать подробный лог для отладки в WordPress
21.11.2025
Оптимизация базы данных WordPress: удаляем старые ревизии и чистим базу
15.11.2025
Как создать собственный блок в Gutenberg WordPress: практическое руководство
15.01.2026
Как использовать метод wpnews_detect_user_agent для определения User Agent в WordPress
17.12.2025