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

|

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

Зачем нужны динамические таблицы в 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 помогает формировать и отображать.

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

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

При необходимости можно написать свой 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
16.03.2026
Как автоматически отказывать в доступе неавторизованным пользователям в WordPress
08.04.2026
Как удалить все посты из определённой категории в WordPress через код
30.01.2026
Как сделать автоматическое удаление простых категорий в WordPress по условию
05.03.2026
Как использовать хуки для контроля корзины WooCommerce: практическое руководство
17.04.2026
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙