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

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

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

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

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

Рассмотрим, как самостоятельно реализовать динамическую таблицу с фильтрацией и пагинацией, используя AJAX в WordPress.

Основные шаги создания динамической таблицы в WordPress с AJAX

Регистрация AJAX обработчиков в WordPress

Для начала нужно зарегистрировать обработчики AJAX-запросов в functions.php вашей темы или в плагине. В WordPress для AJAX существуют два варианта действий — для авторизованных и для неавторизованных пользователей.

add_action('wp_ajax_wpmax_get_table_data', 'wpmax_get_table_data_callback');
add_action('wp_ajax_nopriv_wpmax_get_table_data', 'wpmax_get_table_data_callback');

function wpmax_get_table_data_callback() {
    // Проверка nonce для безопасности
    check_ajax_referer('wpmax_table_nonce', 'security');

    $page = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $items_per_page = 10;

    // Здесь можно получить данные из базы
    global $wpdb;
    $offset = ($page - 1) * $items_per_page;

    $table_name = $wpdb->prefix . 'wpmax_data';

    $total_items = $wpdb->get_var("SELECT COUNT(*) FROM {$table_name}");

    $results = $wpdb->get_results($wpdb->prepare(
        "SELECT * FROM {$table_name} LIMIT %d, %d",
        $offset, $items_per_page
    ));

    wp_send_json_success([
        'data' => $results,
        'total' => $total_items,
        'page' => $page,
        'items_per_page' => $items_per_page
    ]);

    wp_die();
}

В этом примере мы регистрируем AJAX-обработчик wpmax_get_table_data_callback, который получает данные из пользовательской таблицы базы данных и возвращает JSON с результатами и информацией о пагинации.

Добавление JavaScript для отправки AJAX-запросов

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

jQuery(document).ready(function($) {
    function wpmax_load_table(page = 1) {
        $.ajax({
            url: wpmax_ajax_object.ajax_url,
            method: 'POST',
            data: {
                action: 'wpmax_get_table_data',
                security: wpmax_ajax_object.nonce,
                page: page
            },
            success: function(response) {
                if (response.success) {
                    let rows = '';
                    response.data.data.forEach(function(item) {
                        rows += `<tr><td>${item.id}</td><td>${item.name}</td><td>${item.email}</td></tr>`;
                    });
                    $('#wpmax-table tbody').html(rows);

                    // Обновление пагинации
                    let totalPages = Math.ceil(response.data.total / response.data.items_per_page);
                    let pagination = '';
                    for(let i=1; i<=totalPages; i++) {
                        pagination += `<button class='wpmax-page-btn' data-page='${i}'>${i}</button>`;
                    }
                    $('#wpmax-pagination').html(pagination);
                }
            }
        });
    }

    // Загрузка первой страницы при инициализации
    wpmax_load_table();

    // Обработка клика по кнопкам пагинации
    $('#wpmax-pagination').on('click', '.wpmax-page-btn', function() {
        let page = $(this).data('page');
        wpmax_load_table(page);
    });
});

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

Вывод таблицы в шаблоне WordPress

Для отображения таблицы добавим HTML-шаблон в нужное место темы или в шорткод:

<table id="wpmax-table">
  <thead>
    <tr>
      <th>ID</th>
      <th>Имя</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
    <tr><td colspan="3">Загрузка...</td></tr>
  </tbody>
</table>
<div id="wpmax-pagination"></div>

Обязательно подключите скрипт и передайте необходимые переменные через wp_localize_script:

function wpmax_enqueue_scripts() {
    wp_enqueue_script('wpmax-ajax', get_template_directory_uri() . '/js/wpmax-ajax.js', ['jquery'], null, true);
    wp_localize_script('wpmax-ajax', 'wpmax_ajax_object', [
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpmax_table_nonce')
    ]);
}
add_action('wp_enqueue_scripts', 'wpmax_enqueue_scripts');

Улучшение функционала динамических таблиц

Добавление фильтрации и сортировки

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

Например, добавим поле фильтра по имени:

data: {
    action: 'wpmax_get_table_data',
    security: wpmax_ajax_object.nonce,
    page: page,
    filter_name: $('#filter-name').val(),
    order_by: currentOrderBy,
    order: currentOrder
},

В обработчике PHP добавим условие:

$filter_name = isset($_POST['filter_name']) ? sanitize_text_field($_POST['filter_name']) : '';
$where = '';
if ($filter_name !== '') {
    $where = $wpdb->prepare("WHERE name LIKE %s", '%' . $wpdb->esc_like($filter_name) . '%');
}

$total_items = $wpdb->get_var("SELECT COUNT(*) FROM {$table_name} {$where}");

$results = $wpdb->get_results($wpdb->prepare(
    "SELECT * FROM {$table_name} {$where} ORDER BY {$order_by} {$order} LIMIT %d, %d",
    $offset, $items_per_page
));

Это позволит динамически фильтровать таблицу по имени, а аналогично можно добавить и другие поля.

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

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

  • Clearfy Pro — многофункциональный плагин с возможностью оптимизации и расширения функционала таблиц.
  • WPRemark — плагин для создания отзывов и таблиц с рейтингами.

Такие решения имеют встроенную поддержку AJAX и позволяют быстро добавить фильтруемые таблицы без написания кода.

Рекомендации по безопасности и производительности

При работе с AJAX важно:

  • Обязательно проверять nonce и права пользователя в обработчиках, чтобы предотвратить CSRF-атаки.
  • Оптимизировать SQL-запросы, использовать индексы и избегать выборки лишних данных.
  • Кэшировать результаты при необходимости, чтобы снизить нагрузку на базу.
  • Минимизировать объем передаваемых данных, отправляя только нужные поля.

Соблюдение этих правил поможет создать надежный и быстрый функционал динамических таблиц.

Заключение

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

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

Как сделать автоматический ответ на комментарии в WordPress
15.12.2025
WooCommerce: как исключить товар из каталога без удаления
07.05.2026
Как создать свой плагин WordPress с нуля: пошаговое руководство
02.11.2025
Как добавить многоязычность в WordPress без плагинов: практическое руководство
19.12.2025
Как изменить размер изображений в WooCommerce без поддержки темы
07.03.2026