В некоторых проектах на WordPress возникает задача создавать уникальные файлы, доступные только конкретному пользователю. Это может понадобиться для генерации персональных отчетов, сертификатов, счетов или других документов. В этой статье расскажу, как реализовать такую функциональность с минимальными затратами и максимальной безопасностью.
Зачем создавать уникальные файлы для пользователей WordPress
Создание уникальных файлов позволяет персонализировать контент и сервис на сайте. Например, вы можете генерировать PDF-сертификаты после прохождения курса, создавать индивидуальные прайс-листы или формировать отчеты. В отличие от простого хранения статических файлов, динамическое создание позволяет всегда актуализировать данные и не хранить лишнюю информацию на сервере.
Также уникальные файлы можно защитить от доступа других пользователей, что важно для приватных данных.
Общие подходы к решению задачи
Существует несколько способов реализовать уникальные файлы:
- Динамическая генерация файла по запросу с использованием PHP
- Создание файла при определенном событии (например, регистрации, оплате) и сохранение его на сервере
- Использование плагинов, которые поддерживают генерацию документов и защищенный доступ
Рассмотрим подробнее динамическую генерацию и пример кода для WordPress.
Пример генерации уникального PDF файла для пользователя
Для генерации PDF файлов в WordPress удобно использовать библиотеку TCPDF или Dompdf. В этом примере применим Dompdf.
Сначала нужно подключить Dompdf в ваш плагин или тему. Лучший способ — установить через Composer или положить библиотеку в папку с плагином.
Шаг 1: Подключение Dompdf
require_once 'path-to-dompdf/autoload.inc.php';
use Dompdf\Dompdf;Шаг 2: Создаем функцию wpwp_generate_unique_pdf для генерации PDF
function wpwp_generate_unique_pdf( $user_id ) {
if ( ! class_exists( 'Dompdf\Dompdf' ) ) {
return false; // Библиотека не подключена
}
$dompdf = new Dompdf();
// Получаем данные пользователя
$user_info = get_userdata( $user_id );
if ( ! $user_info ) {
return false;
}
$html = '<h1>Персональный документ для ' . esc_html( $user_info->display_name ) . '</h1>';
$html .= '<p>Email: ' . esc_html( $user_info->user_email ) . '</p>';
$html .= '<p>Дата создания: ' . date( 'd.m.Y H:i' ) . '</p>';
$dompdf->loadHtml( $html );
$dompdf->setPaper( 'A4', 'portrait' );
$dompdf->render();
// Получаем PDF как строку
$output = $dompdf->output();
// Путь для сохранения файла
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/user-docs/user-' . $user_id . '.pdf';
// Создаем директорию, если не существует
if ( ! file_exists( dirname( $file_path ) ) ) {
wp_mkdir_p( dirname( $file_path ) );
}
// Сохраняем файл
file_put_contents( $file_path, $output );
// Возвращаем URL файла
return $upload_dir['baseurl'] . '/user-docs/user-' . $user_id . '.pdf';
}Подключение функции к пользовательскому интерфейсу
Чтобы пользователь мог скачать свой файл, добавим простой шорткод, который проверяет текущего пользователя и выводит ссылку на PDF.
function wpwp_user_pdf_shortcode() {
if ( ! is_user_logged_in() ) {
return '<p>Пожалуйста, войдите, чтобы получить доступ к файлу.</p>';
}
$user_id = get_current_user_id();
$pdf_url = wpwp_generate_unique_pdf( $user_id );
if ( ! $pdf_url ) {
return '<p>Не удалось сгенерировать файл.</p>';
}
return '<p><a href="' . esc_url( $pdf_url ) . '" target="_blank" rel="noopener noreferrer">Скачать ваш персональный PDF</a></p>';
}
add_shortcode( 'user_pdf', 'wpwp_user_pdf_shortcode' );Защита доступа к файлам
Очень важно ограничить доступ к уникальным файлам, чтобы только авторизованный пользователь мог их скачать. В примере выше файлы сохраняются в папке uploads/user-docs, которая доступна по URL.
Это не безопасно, если не настроить ограничения на уровне сервера. Рекомендуется:
- Переносить файлы за пределы публичной директории и выдавать через PHP скрипт с проверкой пользователя
- Использовать плагин, например, WPCommunity для управления правами доступа
- Настроить правила в .htaccess или nginx для ограничения доступа к папке user-docs
Пример выдачи файла через PHP с проверкой
function wpwp_serve_user_pdf() {
if ( ! is_user_logged_in() || ! isset( $_GET['file'] ) ) {
wp_die( 'Доступ запрещен' );
}
$user_id = get_current_user_id();
$requested_file = sanitize_text_field( wp_unslash( $_GET['file'] ) );
$expected_file = 'user-' . $user_id . '.pdf';
if ( $requested_file !== $expected_file ) {
wp_die( 'Доступ запрещен' );
}
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/user-docs/' . $expected_file;
if ( ! file_exists( $file_path ) ) {
wp_die( 'Файл не найден' );
}
header( 'Content-Type: application/pdf' );
header( 'Content-Disposition: attachment; filename="' . $expected_file . '"' );
readfile( $file_path );
exit;
}
add_action( 'init', function() {
if ( isset( $_GET['download_user_pdf'] ) ) {
wpwp_serve_user_pdf();
}
} );Теперь ссылка для скачивания будет выглядеть так: https://example.com/?download_user_pdf=1&file=user-123.pdf, где 123 — ID пользователя. Это исключит прямой доступ к файлам.
Использование плагинов для генерации документов и защиты
Если не хочется писать код, можно воспользоваться готовыми решениями:
- WPGPT — для создания персонализированного контента с помощью ИИ, который затем можно экспортировать
- Expert Review — для генерации отчетов и отзывов
- WPRemark — управление отзывами с возможностью экспорта
Эти плагины позволяют создавать отчеты и документы с учетом персональных данных пользователей, а также настраивать права доступа.
Итоговые рекомендации
Создание уникальных файлов для каждого пользователя в WordPress — задача решаемая с помощью динамической генерации PDF, хранения файлов с правильными правами и выдачи через PHP. Использование плагинов из WPShop поможет упростить разработку и обезопасить доступ к важным данным.
Обязательно тестируйте доступ и защищенность файлов, учитывайте нагрузку при генерации динамических документов. Для сложных проектов рекомендуем кэшировать результаты и продумывать логику обновления.