WPExperts

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

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

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

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

В WordPress AJAX реализуется через специальные хуки и JavaScript, что дает гибкость и безопасность.

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

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

  1. Создание HTML-разметки таблицы и кнопки для подгрузки данных.
  2. Написание JavaScript-кода для отправки AJAX-запроса и обновления таблицы.
  3. Регистрация PHP-функции для обработки AJAX-запроса в WordPress.
  4. Вывод данных из базы или другого источника в формате JSON.

1. Создаем HTML-разметку таблицы

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

<table id="wpexperts-dynamic-table" border="1" cellpadding="5" cellspacing="0">
    <thead>
        <tr>
            <th>ID</th>
            <th>Название</th>
            <th>Дата</th>
        </tr>
    </thead>
    <tbody>
        <tr><td colspan="3">Данные отсутствуют</td></tr>
    </tbody>
</table>

<button id="wpexperts-load-data">Загрузить данные</button>

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

2. JavaScript для отправки AJAX-запроса

Добавим JavaScript, который будет отправлять запрос на сервер и обновлять таблицу:

document.getElementById('wpexperts-load-data').addEventListener('click', function() {
    const tableBody = document.querySelector('#wpexperts-dynamic-table tbody');
    tableBody.innerHTML = '<tr><td colspan="3">Загрузка...</td></tr>';

    fetch(wpexperts_ajax_object.ajax_url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: new URLSearchParams({
            action: 'wpexperts_load_table_data',
            security: wpexperts_ajax_object.nonce
        })
    })
    .then(response => response.json())
    .then(data => {
        if(data.success) {
            let rows = '';
            data.data.forEach(item => {
                rows += `<tr><td>${item.id}</td><td>${item.title}</td><td>${item.date}</td></tr>`;
            });
            tableBody.innerHTML = rows;
        } else {
            tableBody.innerHTML = '<tr><td colspan="3">Ошибка загрузки данных</td></tr>';
        }
    })
    .catch(() => {
        tableBody.innerHTML = '<tr><td colspan="3">Ошибка соединения</td></tr>';
    });
});

Код использует fetch API для отправки POST-запроса на сервер. Для безопасности передаем nonce.

3. Регистрация скрипта и локализация AJAX-переменных в WordPress

В functions.php темы или плагина добавим регистрацию и подключение скрипта с передачей параметров:

function wpexperts_enqueue_scripts() {
    wp_enqueue_script('wpexperts-ajax-script', get_template_directory_uri() . '/js/wpexperts-ajax.js', array('jquery'), '1.0', true);
    wp_localize_script('wpexperts-ajax-script', 'wpexperts_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpexperts_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpexperts_enqueue_scripts');

Этот код подключит JS и передаст адрес AJAX и nonce.

4. Обработка AJAX-запроса на PHP

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

function wpexperts_handle_load_table_data() {
    check_ajax_referer('wpexperts_ajax_nonce', 'security');

    $query = new WP_Query(array(
        'posts_per_page' => 5,
        'post_status' => 'publish'
    ));

    $result = array();

    if($query->have_posts()) {
        while($query->have_posts()) {
            $query->the_post();
            $result[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'date' => get_the_date('Y-m-d')
            );
        }
        wp_reset_postdata();
    }

    wp_send_json_success($result);
}
add_action('wp_ajax_wpexperts_load_table_data', 'wpexperts_handle_load_table_data');
add_action('wp_ajax_nopriv_wpexperts_load_table_data', 'wpexperts_handle_load_table_data');

Функция проверяет nonce, получает последние 5 постов и возвращает их в формате JSON.

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

Если вы хотите расширить функционал, можно использовать плагины, например:

  • ABC Pagination — для удобной постраничной навигации в таблицах.
  • WPRemark — для добавления отзывов с рейтингами в таблицы.

Также можно добавить сортировку и поиск по таблице через JavaScript (например, с помощью DataTables), но важно учитывать нагрузку на сервер и оптимизировать запросы.

Советы по безопасности и производительности

При создании динамических таблиц с AJAX обязательно проверяйте nonce для защиты от CSRF. Не выводите лишние данные, используйте пагинацию и кэширование, если количество записей очень большое.

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

Также можно комбинировать этот подход с плагинами оптимизации, например Clearfy Pro, чтобы ускорить загрузку и минимизировать лишний код.

Итог

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

Используйте пример кода как основу для своих проектов и адаптируйте под конкретные нужды.

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙