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

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

Почему стоит использовать динамические таблицы в WordPress

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

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

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

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

function wpaction_dynamic_table_shortcode() {
    $data = [
        ['ID' => 1, 'Название' => 'Продукт A', 'Цена' => '1000'],
        ['ID' => 2, 'Название' => 'Продукт B', 'Цена' => '1500'],
        ['ID' => 3, 'Название' => 'Продукт C', 'Цена' => '2000'],
    ];

    $output = '<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse; width: 100%;">';
    $output .= '<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('wpaction_table', 'wpaction_dynamic_table_shortcode');

Этот шорткод [wpaction_table] можно вставить в любую страницу или запись, и он выведет таблицу с указанными данными. Это простой способ начать работу с динамическими таблицами.

Вывод данных из базы данных WordPress в динамическую таблицу

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

Для примера выведем список последних 5 записей типа post с заголовком и датой публикации:

function wpaction_posts_table_shortcode() {
    global $wpdb;
    $results = $wpdb->get_results("SELECT ID, post_title, post_date FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC LIMIT 5", ARRAY_A);

    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></tr></thead><tbody>';

    foreach ($results as $row) {
        $output .= '<tr>';
        $output .= '<td>' . esc_html($row['ID']) . '</td>';
        $output .= '<td><a href="' . esc_url(get_permalink($row['ID'])) . '">' . esc_html($row['post_title']) . '</a></td>';
        $output .= '<td>' . date_i18n('d.m.Y H:i', strtotime($row['post_date'])) . '</td>';
        $output .= '</tr>';
    }

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

    return $output;
}
add_shortcode('wpaction_posts_table', 'wpaction_posts_table_shortcode');

Добавьте шорткод [wpaction_posts_table] в нужное место — и таблица со свежими постами появится автоматически.

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

Для удобства пользователей можно добавить фильтрацию и пагинацию. Например, выводить записи по категориям или постранично. Для этого пригодится использование параметров шорткода и AJAX-запросов.

Пример расширения шорткода с параметром категории:

function wpaction_posts_table_shortcode($atts) {
    $atts = shortcode_atts(['category' => ''], $atts, 'wpaction_posts_table');
    global $wpdb;
    $category_filter = '';

    if (!empty($atts['category'])) {
        $cat_id = get_cat_ID($atts['category']);
        if ($cat_id) {
            $category_filter = $wpdb->prepare(
                "AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = %d)",
                $cat_id
            );
        }
    }

    $query = "SELECT ID, post_title, post_date FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'post' " . $category_filter . " ORDER BY post_date DESC LIMIT 10";
    $results = $wpdb->get_results($query, ARRAY_A);

    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></tr></thead><tbody>';

    foreach ($results as $row) {
        $output .= '<tr>';
        $output .= '<td>' . esc_html($row['ID']) . '</td>';
        $output .= '<td><a href="' . esc_url(get_permalink($row['ID'])) . '">' . esc_html($row['post_title']) . '</a></td>';
        $output .= '<td>' . date_i18n('d.m.Y H:i', strtotime($row['post_date'])) . '</td>';
        $output .= '</tr>';
    }

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

    return $output;
}
add_shortcode('wpaction_posts_table', 'wpaction_posts_table_shortcode');

Теперь, используя шорткод [wpaction_posts_table category="название_категории"], можно вывести таблицу с постами выбранной категории.

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

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

  • TablePress — один из самых популярных плагинов для создания таблиц. Поддерживает импорт/экспорт, сортировку, фильтрацию. Есть расширения для работы с динамическими данными.
  • wpDataTables — мощный коммерческий плагин, который может подключаться к базам данных, Google Sheets, Excel и отображать большие таблицы с поиском и фильтрами.
  • Advanced Custom Fields (ACF) + Custom Post Type UI — в связке позволяют создавать кастомные типы записей с полями, данные которых можно выводить в таблицах через кастомные шорткоды.

Для интеграции с WPShop рекомендуем обратить внимание на Expert Review, который позволяет выводить отзывы и рейтинги в виде таблиц и списков с гибкой настройкой и шорткодами.

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

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

  • Кэширование результатов. Для сложных запросов используйте транзиенты или сторонние системы кэширования, чтобы снизить нагрузку на базу данных.
  • Минимизация количества запросов. Загружайте только необходимую информацию, избегайте лишних JOIN и подзапросов.
  • Адаптивность таблиц. Используйте CSS и JavaScript для корректного отображения на мобильных устройствах. Например, плагины TablePress и wpDataTables уже имеют такие функции.
  • Безопасность. Всегда экранируйте вывод данных с помощью функций esc_html(), esc_url() и используйте подготовленные запросы $wpdb->prepare() для защиты от SQL-инъекций.

Пример кэширования с помощью транзиентов

function wpaction_cached_posts_table_shortcode() {
    $cache_key = 'wpaction_posts_table_cache';
    $output = get_transient($cache_key);

    if ($output === false) {
        global $wpdb;
        $results = $wpdb->get_results("SELECT ID, post_title, post_date FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC LIMIT 10", ARRAY_A);

        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></tr></thead><tbody>';

        foreach ($results as $row) {
            $output .= '<tr>';
            $output .= '<td>' . esc_html($row['ID']) . '</td>';
            $output .= '<td><a href="' . esc_url(get_permalink($row['ID'])) . '">' . esc_html($row['post_title']) . '</a></td>';
            $output .= '<td>' . date_i18n('d.m.Y H:i', strtotime($row['post_date'])) . '</td>';
            $output .= '</tr>';
        }

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

        set_transient($cache_key, $output, HOUR_IN_SECONDS);
    }

    return $output;
}
add_shortcode('wpaction_cached_posts_table', 'wpaction_cached_posts_table_shortcode');

Этот код кэширует таблицу на 1 час, уменьшая нагрузку при частых запросах.

Заключение

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

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

Как избежать проблем с кэшированием в WordPress: практические решения
01.01.2026
Как настроить отложенный запуск задач в WordPress без плагинов
07.01.2026
Как автоматизировать публикации в WordPress с помощью WPRemark
26.12.2025
Обработка AJAX запросов в WordPress с примерами кода
21.11.2025
Оптимизация базы данных WordPress: как ускорить сайт и снизить нагрузку
14.11.2025