В современных проектах на WordPress часто возникает задача создания отчетов, которые автоматически обновляются при изменении данных и при этом имеют удобные способы доступа. Одним из таких решений является генерация автообновляемых отчетов с возможностью быстрого перехода через QR-код. В этой статье мы разберем, как создать такой отчет, используя собственные типы записей, AJAX-обновление и генерацию QR-кодов с помощью PHP-библиотек.
Почему важен автообновляемый отчет с QR-кодом в WordPress
Отчеты с динамическими данными позволяют оперативно получать актуальную информацию без необходимости ручного обновления. Автоматическое обновление экономит время и уменьшает риск ошибок. Добавление QR-кода позволяет быстро перейти к отчету с мобильного устройства, что удобно для презентаций, офлайн-документов и взаимодействия с пользователями.
Такое решение актуально для сайтов с большим количеством данных, аналитикой, статистикой и внутренними отчетами. Особенно полезно, если отчет нужно быстро открыть на смартфоне или планшете без ввода URL вручную.
Создаем собственный тип записи для отчетов
Первым шагом создадим кастомный тип записи wpdata_report, который будет хранить данные отчетов. Это позволит удобно управлять отчетами из админки WordPress.
function wpdata_register_report_post_type() {
$labels = array(
'name' => 'Отчеты',
'singular_name' => 'Отчет',
'add_new' => 'Добавить отчет',
'add_new_item' => 'Добавить новый отчет',
'edit_item' => 'Редактировать отчет',
'all_items' => 'Все отчеты',
'menu_name' => 'Отчеты'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'supports' => array('title', 'editor')
);
register_post_type('wpdata_report', $args);
}
add_action('init', 'wpdata_register_report_post_type');
После добавления этого кода в файл functions.php или в свой плагин, в админке появится новый раздел «Отчеты».
Автоматическое обновление данных отчета через AJAX
Для обновления данных отчета без перезагрузки страницы используем AJAX. Предположим, что отчет выводит статистику с определенными метаданными или внешними данными, которые нужно обновлять.
Создадим AJAX-обработчик, который будет возвращать свежие данные в JSON-формате.
function wpdata_ajax_get_report_data() {
// Проверка nonce для безопасности
check_ajax_referer('wpdata_report_nonce', 'security');
$report_id = isset($_POST['report_id']) ? intval($_POST['report_id']) : 0;
if (!$report_id) {
wp_send_json_error('Invalid report ID');
}
// Пример получения данных: можно заменить на реальную логику
$data = array(
'date' => current_time('mysql'),
'views' => rand(100, 1000),
'sales' => rand(10, 100)
);
wp_send_json_success($data);
}
add_action('wp_ajax_get_report_data', 'wpdata_ajax_get_report_data');
add_action('wp_ajax_nopriv_get_report_data', 'wpdata_ajax_get_report_data');
Теперь добавим JavaScript для вызова этого AJAX-обработчика и обновления данных на странице отчета.
jQuery(document).ready(function($) {
function wpdataUpdateReport(reportId) {
$.ajax({
url: wpdata_vars.ajax_url,
method: 'POST',
data: {
action: 'get_report_data',
report_id: reportId,
security: wpdata_vars.nonce
},
success: function(response) {
if(response.success) {
$('#wpdata-report-date').text(response.data.date);
$('#wpdata-report-views').text(response.data.views);
$('#wpdata-report-sales').text(response.data.sales);
}
}
});
}
var reportId = $('#wpdata-report').data('report-id');
wpdataUpdateReport(reportId);
// Обновлять отчет каждые 5 минут
setInterval(function() {
wpdataUpdateReport(reportId);
}, 300000);
});
Для передачи переменных из PHP в JavaScript добавим локализацию скрипта:
function wpdata_enqueue_scripts() {
wp_enqueue_script('wpdata-report-script', get_template_directory_uri() . '/js/wpdata-report.js', array('jquery'), null, true);
wp_localize_script('wpdata-report-script', 'wpdata_vars', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wpdata_report_nonce')
));
}
add_action('wp_enqueue_scripts', 'wpdata_enqueue_scripts');
Генерация QR-кода для быстрого доступа к отчету
Для генерации QR-кодов на PHP отлично подходит библиотека Endroid QR Code. Для начала установим ее через Composer:
composer require endroid/qr-code
Если вы не используете Composer, можно скачать библиотеку и подключить вручную. Далее создадим функцию для вывода QR-кода с URL отчета.
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
function wpdata_generate_qr_code($url) {
$qrCode = new QrCode($url);
$qrCode->setSize(150);
$writer = new PngWriter();
$result = $writer->write($qrCode);
header('Content-Type: '.$result->getMimeType());
echo $result->getString();
exit;
}
// Регистрируем endpoint для вывода QR-кода
function wpdata_add_qr_code_endpoint() {
add_rewrite_rule('^wpdata-qr/([0-9]+)/?$', 'index.php?wpdata_qr_id=$matches[1]', 'top');
}
add_action('init', 'wpdata_add_qr_code_endpoint');
function wpdata_qr_code_template($query_vars) {
if (isset($query_vars->query_vars['wpdata_qr_id'])) {
$report_id = intval($query_vars->query_vars['wpdata_qr_id']);
$url = get_permalink($report_id);
if ($url) {
wpdata_generate_qr_code($url);
}
exit;
}
}
add_action('parse_request', 'wpdata_qr_code_template');
function wpdata_add_query_vars($vars) {
$vars[] = 'wpdata_qr_id';
return $vars;
}
add_filter('query_vars', 'wpdata_add_query_vars');
Сбросьте пермалинки в админке, чтобы правило заработало. Теперь URL https://ваш-сайт/wpdata-qr/<ID_отчета> будет отдавать PNG с QR-кодом, ведущим на отчет.
Вывод отчета с QR-кодом и динамическими данными
В шаблоне одиночного отчета (single-wpdata_report.php) выведите данные отчета и QR-код:
<div id="wpdata-report" data-report-id="<?php the_ID(); ?>">
<h2><?php the_title(); ?></h2>
<div id="wpdata-report-data">
<p>Дата обновления: <span id="wpdata-report-date">Загрузка...</span></p>
<p>Просмотры: <span id="wpdata-report-views">Загрузка...</span></p>
<p>Продажи: <span id="wpdata-report-sales">Загрузка...</span></p>
</div>
<div id="wpdata-report-qr">
<img src="<?php echo site_url('/wpdata-qr/' . get_the_ID()); ?>" alt="QR-код для отчета" />
</div>
</div>
Так пользователь получит актуальные данные без перезагрузки и удобный QR-код для мобильного доступа.
Рекомендации по плагинам для расширения функционала
- WPData (https://wpshop.ru/plugin/wpdata/?utm_source=wpdata.ru&utm_medium=article&utm_campaign=kak-sozdat-effektivnyy-avtoobnovlyaemyi-otchet-v-wordpress-s-qrcode) — отличный плагин для работы с большими объемами данных и динамическими отчетами, который можно интегрировать с вашим кастомным типом записей.
- Clearfy Pro
- Expert Review (https://wpshop.ru/plugin/expert-review/?utm_source=wpdata.ru&utm_medium=article&utm_campaign=kak-sozdat-effektivnyy-avtoobnovlyaemyi-otchet-v-wordpress-s-qrcode) — если отчеты связаны с отзывами и аналитикой, поможет структурировать данные.
Итоги
Создание автообновляемого отчета с QR-кодом в WordPress — задача вполне выполнимая с помощью кастомных типов записей, AJAX и PHP-библиотек. Такой подход позволит обеспечить удобный доступ к актуальной информации и улучшить взаимодействие с пользователями. Используйте приведенные примеры и адаптируйте под свои нужды для создания надежных и функциональных отчетов.