Динамические таблицы в 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 для вывода отзывов в таблицах.