Веб-разработчикам и администраторам сайтов на WordPress часто приходится работать с таблицами, которые нужно не просто вставить статично, а сделать динамическими — чтобы данные обновлялись автоматически, были фильтруемыми и сортируемыми. В этой статье разберём, как создать динамические таблицы с помощью шорткодов, а также рассмотрим популярные плагины и примеры кастомного кода.
Почему динамические таблицы важны для сайта на WordPress
Статичные таблицы, созданные через HTML или визуальный редактор, сложно поддерживать: при изменении данных приходится редактировать каждый элемент вручную. Динамические таблицы позволяют:
- Автоматически подтягивать данные из базы или внешних источников.
- Добавлять сортировку и фильтры для удобства пользователя.
- Обновлять содержимое без изменения кода страницы.
- Интегрироваться с пользовательскими типами записей и метаполями.
Это особенно полезно для сайтов с каталогами, прайс-листами, расписаниями и отчетами.
Использование плагинов для создания динамических таблиц в WordPress
Плагин TablePress с расширениями
TablePress — один из самых популярных бесплатных плагинов для таблиц. По умолчанию он создаёт статичные таблицы с возможностью сортировки и фильтрации, но с дополнительными расширениями и интеграциями можно сделать таблицы динамическими.
- Импорт и экспорт данных из CSV, Excel и Google Sheets.
- Использование JavaScript-библиотеки DataTables для интерактивности.
- Возможность добавлять формулы и динамические данные через хуки.
Для интеграции с внешними источниками понадобится писать PHP-функции, которые будут обновлять данные таблиц через API TablePress.
WPDataTables — профессиональный инструмент для сложных таблиц
Этот премиум-плагин позволяет создавать таблицы, которые автоматически подтягивают данные из различных источников: базы данных, CSV, Excel, Google Sheets, а также SQL-запросов. WPDataTables поддерживает продвинутую фильтрацию, сортировку, пагинацию и визуализацию.
Плагин отлично подходит для бизнес-сайтов и порталов с большими объёмами данных.
Создание собственного динамического шорткода для таблиц
Если вы хотите гибко создавать таблицы с уникальной логикой, можно написать собственный шорткод. Рассмотрим пример, как вывести таблицу с последними 5 публикациями из определённой категории в виде динамической таблицы.
Пример кода шорткода wptalk_dynamic_table
function wptalk_dynamic_table_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => '',
'posts_per_page' => 5,
), $atts, 'wptalk_dynamic_table');
$args = array(
'post_type' => 'post',
'posts_per_page' => intval($atts['posts_per_page']),
'category_name' => sanitize_text_field($atts['category']),
);
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Публикации не найдены.</p>';
}
$output = '<table class="wptalk-dynamic-table" border="1" cellspacing="0" cellpadding="5">';
$output .= '<thead><tr><th>Заголовок</th><th>Дата публикации</th></tr></thead>';
$output .= '<tbody>';
while ($query->have_posts()) {
$query->the_post();
$output .= '<tr>';
$output .= '<td><a href="' . get_permalink() . '">' . get_the_title() . '</a></td>';
$output .= '<td>' . get_the_date('d.m.Y') . '</td>';
$output .= '</tr>';
}
wp_reset_postdata();
$output .= '</tbody></table>';
// Добавим простой JS для сортировки по заголовку
$output .= '<script>
document.addEventListener("DOMContentLoaded", function() {
var table = document.querySelector(".wptalk-dynamic-table");
if (!table) return;
var th = table.querySelectorAll("thead th");
th[0].style.cursor = "pointer";
th[0].addEventListener("click", function() {
var tbody = table.querySelector("tbody");
var rows = Array.from(tbody.querySelectorAll("tr"));
var asc = this.asc = !this.asc;
rows.sort(function(a, b) {
var aText = a.cells[0].innerText.toLowerCase();
var bText = b.cells[0].innerText.toLowerCase();
return (aText < bText ? -1 : aText > bText ? 1 : 0) * (asc ? 1 : -1);
});
rows.forEach(function(row) { tbody.appendChild(row); });
});
});
</script>';
return $output;
}
add_shortcode('wptalk_dynamic_table', 'wptalk_dynamic_table_shortcode');
Этот шорткод можно вставить в любую страницу или запись так:
[wptalk_dynamic_table category="novosti" posts_per_page="5"]
Он выведет таблицу с заголовками и датами публикаций из категории "novosti" с возможностью сортировки по заголовку.
Как подключить таблицу к внешнему API или CSV
Для более сложных случаев, когда данные хранятся не в WordPress, а в CSV или API, можно написать функцию, которая загружает и парсит данные, а затем выводит таблицу. Пример загрузки CSV из URL и вывода в таблицу:
function wptalk_csv_to_table_shortcode($atts) {
$atts = shortcode_atts(array(
'url' => '',
), $atts, 'wptalk_csv_table');
if (empty($atts['url'])) {
return '<p>URL CSV файла не указан.</p>';
}
$response = wp_remote_get($atts['url']);
if (is_wp_error($response)) {
return '<p>Не удалось загрузить CSV.</p>';
}
$csv = wp_remote_retrieve_body($response);
if (empty($csv)) {
return '<p>CSV файл пуст.</p>';
}
$lines = explode("\n", trim($csv));
$output = '<table border="1" cellspacing="0" cellpadding="5">';
foreach ($lines as $index => $line) {
$cells = str_getcsv($line);
$tag = $index === 0 ? 'th' : 'td';
$output .= '<tr>';
foreach ($cells as $cell) {
$output .= "<{$tag}>" . esc_html($cell) . "</{$tag}>";
}
$output .= '</tr>';
}
$output .= '</table>';
return $output;
}
add_shortcode('wptalk_csv_table', 'wptalk_csv_to_table_shortcode');
Использование:
[wptalk_csv_table url="https://example.com/data.csv"]
Так можно быстро интегрировать внешние таблицы без установки плагинов.
Оптимизация и безопасность динамических таблиц
При работе с динамическими таблицами важно соблюдать несколько правил:
- Всегда фильтруйте и экранируйте входные данные (например, атрибуты шорткодов) для предотвращения XSS и SQL-инъекций.
- Кешируйте результаты запросов, если данные не меняются часто — это уменьшит нагрузку на сервер.
- Используйте встроенные функции WordPress для работы с базой и HTTP-запросами.
- Обратите внимание на адаптивность таблиц — чтобы они корректно отображались на мобильных устройствах.
Например, для кеширования можно использовать set_transient и get_transient:
function wptalk_cached_dynamic_table($atts) {
$cache_key = 'wptalk_table_' . md5(json_encode($atts));
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$output = wptalk_dynamic_table_shortcode($atts); // Вызов вашей функции генерации таблицы
set_transient($cache_key, $output, 3600); // Кеш на 1 час
return $output;
}
add_shortcode('wptalk_cached_dynamic_table', 'wptalk_cached_dynamic_table');
Выводы и рекомендации
Динамические таблицы — мощный инструмент для улучшения контента сайта. Если вам не подходят готовые плагины, пишите собственные шорткоды с использованием WP_Query, загрузкой внешних данных и базовыми интерактивными элементами на JavaScript.
Для более удобного управления рассмотрите WPDataTables или TablePress с расширениями, особенно если данные часто меняются и объемы большие.
Также для расширения функционала можно посмотреть на плагин Clearfy Pro, который поможет оптимизировать работу с кодом и повысить безопасность.