Зачем нужны динамические таблицы с подпиской на обновления в WordPress
Динамические таблицы позволяют отображать данные, которые могут меняться без необходимости ручного редактирования контента. Особенно полезно, если данные поступают из внешних источников или часто обновляются по мере работы сайта. Добавление подписки на обновления позволяет пользователям получать уведомления о появлении новых данных или изменениях в таблице, что повышает вовлечённость и удобство использования.
Рассмотрим, как создать такую таблицу на WordPress с помощью кода и дополнить её функционалом подписки. Это поможет избежать использования громоздких плагинов и сохранить контроль над функционалом.
Выбор подхода и плагинов для динамических таблиц с подписками
Для создания динамических таблиц можно использовать несколько подходов:
- Создание кастомных шорткодов с использованием WP REST API и AJAX;
- Использование готовых плагинов, поддерживающих динамическое обновление;
- Комбинирование кастомного кода и плагинов для подписок.
Для подписок подойдут плагины, которые умеют отправлять email при обновлении контента. Например, Expert Review можно адаптировать для отзывов с динамическим обновлением, а для рассылок — интеграция с системой уведомлений через WP Cron или сторонние сервисы.
Создание динамической таблицы с AJAX и шорткодом hueman_dynamic_table
Пример создания шорткода [hueman_dynamic_table], который выводит данные из кастомной таблицы в базе и обновляет их без перезагрузки страницы.
function hueman_dynamic_table_ajax_handler() {
global $wpdb;
$table_name = $wpdb->prefix . 'hueman_data';
$results = $wpdb->get_results("SELECT id, name, value, updated_at FROM $table_name ORDER BY updated_at DESC");
if (empty($results)) {
wp_send_json_error('Нет данных для отображения');
}
$data = [];
foreach ($results as $row) {
$data[] = [
'id' => $row->id,
'name' => esc_html($row->name),
'value' => esc_html($row->value),
'updated_at' => esc_html($row->updated_at),
];
}
wp_send_json_success($data);
}
add_action('wp_ajax_hueman_dynamic_table', 'hueman_dynamic_table_ajax_handler');
add_action('wp_ajax_nopriv_hueman_dynamic_table', 'hueman_dynamic_table_ajax_handler');
function hueman_dynamic_table_shortcode() {
ob_start();
?>
<table id="hueman-table" border="1" cellpadding="5" cellspacing="0">
<thead>
<tr><th>ID</th><th>Название</th><th>Значение</th><th>Обновлено</th></tr>
</thead>
<tbody><tr><td colspan="4">Загрузка данных...</td></tr></tbody>
</table>
<button id="hueman-refresh">Обновить таблицу</button>
<script type="text/javascript">
jQuery(document).ready(function($){
function huemanLoadTable() {
$.ajax({
url: ajaxurl,
method: 'POST',
data: { action: 'hueman_dynamic_table' },
success: function(response) {
if(response.success) {
var rows = '';
$.each(response.data, function(i, item) {
rows += '<tr><td>'+item.id+'</td><td>'+item.name+'</td><td>'+item.value+'</td><td>'+item.updated_at+'</td></tr>';
});
$('#hueman-table tbody').html(rows);
} else {
$('#hueman-table tbody').html('<tr><td colspan="4">'+response.data+'</td></tr>');
}
},
error: function() {
$('#hueman-table tbody').html('<tr><td colspan="4">Ошибка загрузки данных</td></tr>');
}
});
}
huemanLoadTable();
$('#hueman-refresh').click(huemanLoadTable);
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('hueman_dynamic_table', 'hueman_dynamic_table_shortcode');Этот код создаёт таблицу и кнопку для её обновления. Данные загружаются из базы через AJAX, что позволяет работать с динамическим содержимым без перезагрузки страницы. Для работы нужно создать таблицу в базе wp_hueman_data с нужными данными.
Реализация подписки на обновления таблицы через email
Чтобы пользователи могли подписаться на обновления, можно добавить форму подписки, которая сохранит email в отдельную таблицу, а при обновлении данных рассылать уведомления.
Пример добавления формы подписки и обработки:
function hueman_subscription_form_shortcode() {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['hueman_subscribe_email'])) {
global $wpdb;
$email = sanitize_email($_POST['hueman_subscribe_email']);
if (is_email($email)) {
$table = $wpdb->prefix . 'hueman_subscribers';
$exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE email = %s", $email));
if (!$exists) {
$wpdb->insert($table, ['email' => $email, 'subscribed_at' => current_time('mysql')]);
echo '<div class="success">Спасибо за подписку!</div>';
} else {
echo '<div class="info">Вы уже подписаны.</div>';
}
} else {
echo '<div class="error">Введите корректный email.</div>';
}
}
return '<form method="post"><input type="email" name="hueman_subscribe_email" placeholder="Введите ваш email" required /><button type="submit">Подписаться</button></form>';
}
add_shortcode('hueman_subscription_form', 'hueman_subscription_form_shortcode');Далее нужно добавить функцию, которая будет проверять изменения в таблице wp_hueman_data и при обновлениях рассылать письма подписчикам. Для этого подходит хук планировщика WP Cron.
Пример проверки обновлений и оповещения подписчиков
function hueman_check_updates_and_notify() {
global $wpdb;
$data_table = $wpdb->prefix . 'hueman_data';
$subs_table = $wpdb->prefix . 'hueman_subscribers';
// Получаем последнее время обновления данных из опции
$last_check = get_option('hueman_last_data_update', '1970-01-01 00:00:00');
// Проверяем наличие обновлений
$updated_rows = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM $data_table WHERE updated_at > %s",
$last_check
));
if (!empty($updated_rows)) {
// Обновляем последнюю дату проверки
update_option('hueman_last_data_update', current_time('mysql'));
// Получаем подписчиков
$subscribers = $wpdb->get_col("SELECT email FROM $subs_table");
if (!empty($subscribers)) {
$subject = 'Обновления в таблице на сайте';
$message = "В таблице появились новые или обновленные данные:\n";
foreach ($updated_rows as $row) {
$message .= "ID: $row->id, Название: $row->name, Значение: $row->value, Обновлено: $row->updated_at\n";
}
foreach ($subscribers as $email) {
wp_mail($email, $subject, $message);
}
}
}
}
if (!wp_next_scheduled('hueman_cron_check_updates')) {
wp_schedule_event(time(), 'hourly', 'hueman_cron_check_updates');
}
add_action('hueman_cron_check_updates', 'hueman_check_updates_and_notify');Этот код раз в час проверяет наличие обновлённых данных и рассылает уведомления подписчикам.
Советы по оптимизации и безопасности
При работе с динамическими таблицами важно:
- Использовать подготовленные запросы для защиты от SQL-инъекций;
- Санитизировать и валидировать все пользовательские данные, включая email;
- Кэшировать результаты для снижения нагрузки, если данные обновляются не слишком часто;
- Обеспечить защиту от спама в форме подписки, например, добавить reCAPTCHA;
- Оптимизировать периодичность проверок и рассылок, чтобы не перегружать сервер;
- Использовать асинхронную загрузку таблиц для улучшения UX.
Заключение
Создание динамических таблиц с подпиской на обновления в WordPress — задача, решаемая без тяжёлых плагинов, если грамотно использовать AJAX, WP Cron и собственные шорткоды. Такой подход даёт максимальную гибкость и контроль над функционалом, а также позволяет интегрировать сторонние решения из экосистемы WordPress для уведомлений и управления подписками.
Для удобства вы можете посмотреть плагин Expert Review, который можно адаптировать под ваши задачи, а также использовать другие инструменты из WPShop для расширения функционала сайта.