как создать конечную точку для загрузки pdf файлов?

Вопрос или проблема

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

Я создал новую конечную точку “download”, чтобы адрес загрузки выглядел так: my-website.com/post-name/download/attached-id

function my_custom_endpoint() {
    add_rewrite_endpoint( 'download', EP_PERMALINK | EP_PAGES );
}  
add_action( 'init', 'my_custom_endpoint' );

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

Хорошим хуком для этого будет template_redirect. Вы можете запросить вашу конечную точку таким образом:

add_action('template_redirect', function() {
    global $wp_query;
    
    // Если это не ваша конечная точка и не страница/пост, ничего не делаем.
    if (!isset( $wp_query->query_vars['download']) || ! is_singular()) {
        return;
    }
    
    // Здесь ваша магия!
    […]
    
    // И, вероятно, хорошая идея завершить выполнение, если вы раздаете файлы.
    exit;
});

Также есть отличный учебник о конечных точках на Make WordPress.

Ответ или решение

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

Шаг 1: Создание конечной точки

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

function my_custom_endpoint() {
    add_rewrite_endpoint('download', EP_PERMALINK | EP_PAGES);
}
add_action('init', 'my_custom_endpoint');

Шаг 2: Обработка запросов к конечной точке

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

add_action('template_redirect', function() {
    global $wp_query;

    // Проверяем наличие 'download' в запросе
    if (!isset($wp_query->query_vars['download']) || !is_singular()) {
        return;
    }

    // Получаем ID вложения из URL
    $attachment_id = get_query_var('attached-id');

    // Проверка прав пользователя
    if (!is_user_logged_in()) {
        wp_die('Вы должны быть авторизованы, чтобы скачать этот файл.');
    }

    // Получаем информацию о файле
    $file_path = get_attached_file($attachment_id);

    // Проверяем, существует ли файл
    if (!file_exists($file_path)) {
        wp_die('Файл не найден.');
    }

    // Устанавливаем заголовки для скачивания
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');
    header('Content-Length: ' . filesize($file_path));

    // Записываем информацию о пользователе и дате загрузки в PDF (например, добавляем в метаданные)
    $user = wp_get_current_user();
    $download_date = date('Y-m-d H:i:s');
    // Здесь можно добавить код для изменения PDF (например, используя библиотеку FPDF или TCPDF)

    // Читаем файл и отправляем его пользователю
    readfile($file_path);

    // Завершаем выполнение скрипта
    exit;
});

Шаг 3: Безопасность и проверка прав доступа

Важно, чтобы только авторизованные пользователи могли загружать файлы. Поэтому мы используем функцию is_user_logged_in() для проверки статуса пользователя. Если пользователь неавторизован, выводим сообщение об ошибке.

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

Шаг 4: Регистрация и перезапись правил

После добавления новой конечной точки необходимо сбросить пермалинки в настройках WordPress. Это можно сделать, перейдя в "Настройки" → "Постоянные ссылки" и просто нажав "Сохранить изменения".

Заключение

Создание конечной точки для скачивания PDF-файлов в WordPress — это задача, требующая понимания внутренней архитектуры системы. Этот процесс не только обеспечивает скачивание файлов, но и защищает их от несанкционированного доступа. Используйте предложенный код как шаблон и настройте его в соответствии с вашими требованиями. Не забывайте об оптимизации SEO, поддерживайте актуальность контента, чтобы обеспечить высокую видимость вашего сайта в поисковых системах.

Оцените материал
Добавить комментарий

Капча загружается...