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

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

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

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

  • Фильтровать данные по столбцам;
  • Сортировать строки по возрастанию и убыванию;
  • Обновлять содержимое через AJAX без перезагрузки страницы;
  • Интегрироваться с базой данных WordPress или внешними источниками.

Реализация таких таблиц с нуля может показаться сложной, но использование шорткодов и подключение библиотек JavaScript значительно упрощает задачу.

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

Начнем с написания простого шорткода [wpreboot_dynamic_table], который выводит HTML-таблицу с данными из массива. Позже мы добавим динамические функции.

function wpreboot_dynamic_table_shortcode() {
    $data = [
        ['ID' => 1, 'Имя' => 'Иван', 'Возраст' => 28],
        ['ID' => 2, 'Имя' => 'Мария', 'Возраст' => 34],
        ['ID' => 3, 'Имя' => 'Петр', 'Возраст' => 22],
    ];

    ob_start();
    echo '<table id="wpreboot-table" border="1" cellpadding="5" cellspacing="0">';
    echo '<thead><tr>';
    foreach (array_keys($data[0]) as $header) {
        echo '<th>' . esc_html($header) . '</th>';
    }
    echo '</tr></thead>';
    echo '<tbody>';
    foreach ($data as $row) {
        echo '<tr>';
        foreach ($row as $cell) {
            echo '<td>' . esc_html($cell) . '</td>';
        }
        echo '</tr>';
    }
    echo '</tbody></table>';

    return ob_get_clean();
}
add_shortcode('wpreboot_dynamic_table', 'wpreboot_dynamic_table_shortcode');

Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин. После этого на странице можно вставить шорткод [wpreboot_dynamic_table], и таблица отобразится.

Добавление сортировки и фильтрации с помощью DataTables.js

Чтобы сделать таблицу интерактивной, подключим популярную библиотеку DataTables.js. Она добавляет сортировку, поиск и пагинацию.

Для подключения библиотеки и инициализации таблицы используем wp_enqueue_scripts и wp_footer:

function wpreboot_enqueue_datatables() {
    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', ['jquery'], null, true);
    wp_add_inline_script('datatables-js', "
        jQuery(document).ready(function($) {
            $('#wpreboot-table').DataTable({
                language: {
                    url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/ru.json'
                }
            });
        });
    ");
}
add_action('wp_enqueue_scripts', 'wpreboot_enqueue_datatables');

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

Вывод данных из пользовательского типа записей в таблицу

Часто требуется вывести в таблицу данные из базы WordPress, например, из кастомного типа записей. Рассмотрим пример с типом записей "product" с метаполями "price" и "stock".

function wpreboot_dynamic_table_products_shortcode() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => 50,
        'post_status' => 'publish',
    ];
    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return '<p>Товары не найдены.</p>';
    }

    ob_start();
    echo '<table id="wpreboot-table" class="display">';
    echo '<thead><tr><th>Название</th><th>Цена</th><th>Наличие</th></tr></thead>';
    echo '<tbody>';
    while ($query->have_posts()) {
        $query->the_post();
        $price = get_post_meta(get_the_ID(), 'price', true);
        $stock = get_post_meta(get_the_ID(), 'stock', true);
        echo '<tr>';
        echo '<td>' . esc_html(get_the_title()) . '</td>';
        echo '<td>' . esc_html($price) . '</td>';
        echo '<td>' . esc_html($stock) . '</td>';
        echo '</tr>';
    }
    echo '</tbody></table>';
    wp_reset_postdata();

    return ob_get_clean();
}
add_shortcode('wpreboot_products_table', 'wpreboot_dynamic_table_products_shortcode');

Используйте шорткод [wpreboot_products_table] для вывода актуальной таблицы товаров с сортировкой и поиском.

Подключение плагина ABC Pagination для улучшения навигации таблиц

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

Интеграция с нашей таблицей потребует создания кастомных WP_Query с параметрами пагинации, которые ABC Pagination помогает формировать и отображать.

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

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

  • Используйте серверную обработку (server-side processing) в DataTables для загрузки данных частями.
  • Кешируйте результаты запросов с помощью Transients API.
  • Оптимизируйте запросы WP_Query — выбирайте только нужные поля.
  • Минимизируйте количество подключаемых скриптов и стилей.

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

add_action('wp_ajax_wpreboot_get_table_data', 'wpreboot_get_table_data_callback');
add_action('wp_ajax_nopriv_wpreboot_get_table_data', 'wpreboot_get_table_data_callback');

function wpreboot_get_table_data_callback() {
    // Проверка nonce и прав доступа
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wpreboot_nonce')) {
        wp_send_json_error('Неверный nonce');
        wp_die();
    }

    // Пример получения данных из базы
    global $wpdb;
    $results = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type = 'product' AND post_status = 'publish'", ARRAY_A);

    wp_send_json_success($results);
    wp_die();
}

В JS вы можете вызвать этот ajax и обновлять таблицу без перезагрузки.

Вывод

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

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

Премиум шаблоны для WordPress Купить плагины для WordPress

Демо сайт с темой Reboot

Красивая ВордПресс-тема на русском от wpshop.ru отлично подойдет для блога или новостного ресурса. Современная типографика будет привлекать новых пользователей и "заставит" остаться постоянных читателей. Высокая скорость работы обеспечит высокие показатели PageSpeed даже на медленном дешевом хостинге. Встроенная в тему реклама позволит заработать на своем блоге, разместив блоки Google Ads и Яндекс.Директ в любом месте сайта.

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

Видеообзоры

Преимущества

Настройка главной страницы

Гибкие настройки для создания уникальной главной страницы.

Размер контента

Возможность растянуть контент на всю ширину.

Правильные заголовки H1-H6

Валидные заголовки для SEO.

Настройки заголовка и описания для рубрик

Задание и вывод описания категорий для продвижения.

Нет циклических ссылок

Отсутствие ссылок, ведущих на самих себя.

Полностью адаптивный шаблон Mobile-first

Все элемены сайта корректно отображаются на всех устройствах.

Встроенная реклама

12 гибких рекламных позиций.

Социальные профили и кнопки поделиться

Поддержка 20+ соцсетей и кнопок поделиться.

Свой заголовок для комментариев

Настройка отдельных заголовков для комментариев.

Блоки внимания

8 различных блоков внимания.

Мощная типографика

Больше 30+ Google-шрифтов.

Настройка карточек постов

Отдельные настройки для каждой карточки постов.

Главные отличия WordPress темы Reboot

Можно перечислить следующие функции.

1. Многоцелевая

Изначально темплейт нацелен под блоги и новостные ресурсы. Тут есть все что нужно: боковые панели, выбор и настройка карточки поста, управление мета-информацией страницы.

Страница сайта на основе темы Reboot

Темплейта подходит и для других типов сайтов. Подходит для коммерческого сайта. Для одностраничника есть Конструктор главной, который дает возможность выводить и сортировать посты, добавлять свои HTML-блоки. Также для этого подходит популярный Elementor.

На основе темы можно создать форум. Частично поддерживаются популярные ВордПресс-решения.

Для создания интернет-магазина шаблон можно использовать в связке с WooCommerce.

2. Несколько виджетов в подвале

В нижней части есть область, в которую можно добавить одновременно до 5 виджетов.

Виджеты подвала Reboot

3. Конструктор главной страницы

Главная особенность темы Reboot - конструктор главной страницы. В нем можно добавлять 2 вида блоков: вывод постов и свой код HTML. В первом случае для каждого блока можно задать категорию публикаций, исключить конкретные посты, задать сортировку и вид карточек.

Настройка постов в конструкторе главной Reboot

В блоки HTML можно вставить свой код. Отлично подходит для создания своей разметки, блоков подписки.

Настройка блока HTML в конструкторе главной Reboot

4. Скорость

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

5. Блоки внимания для выделения контента

8+ блоков выделения текста для привлечения внимания и придания содержимому экспертности. Такую статью прочитают в первую очередь.

Блоки внимания Reboot

6. Шорткоды контактной формы и HTML карты сайта

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

Контактная форма Reboot
А карта позволит ему быстрее ориентироваться и найти ответ на вопрос.

Карта сайта Reboot

7. Настройка и вывод рекламы

Тема имеет 10+ блоков для вывода рекламы в шапке, контенте и подвале.

Реклама в Reboot

8. 11+ встроенных модулей

Шаблон Reboot в коробке имеет больше десятка модулей, которые заменят отдельные плагины. Среди них:

  • лайтбокс для увеличения изображения по клику,
  • слайдер постов на главной странице,
  • содержание для большой статьи,
  • счетчик количества просмотров,
  • шаринг в соцсетях.
Настройка модулей Reboot

9. Готовность к SEO продвижению

Тема Reboot готова к работам по СЕО-оптимизации. Имеет правильные теги, микроразметку, описание рубрик, псевдо-ссылки и многое другое.

10. 5 вариантов карточек постов

Все варианты карточек имеют настраиваемую структуру. Можно включить и переставить местами миниатюру, рубрику, заголовок, дату, имя автора, отрывок. Для последнего задается количество символов.

Настройка карточки постов в Reboot

11. Возможность зафиксировать сайдбар при скролле

Актуально для рекламных блоков, которые будут всегда на виду при прокрутке страницы.

Фиксированный сайдбар Reboot

Примеры готовых сайтов на теме Ребут

Можно выделить парочку ресурсов на основе этого темплейта.

Настройка шаблона

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

Настройка Reboot

Документация и список обновлений

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

Промокод со скидкой на покупку

Если хотите получить эту тему, воспользуйтесь промокодом и получите 15% скидку.

Отзывы покупателей

Несколько скриншотов о том, что думают о теме Reboot клиенты WPShop.ru.