wp_handle_upload

Позволяет изменить массив данных для загруженного файла
Хук WordPress
INT 2.1.0
WordPress Icon
Содержание
  1. Описание хука
  2. Примеры использования
  3. Применение хука wp_handle_upload для изменения имени загружаемого файла
  4. Изменение URL загруженного файла с помощью хука wp_handle_upload
  5. Проверка типа загружаемого файла с использованием хука wp_handle_upload
  6. Добавление дополнительных метаданных к загружаемому файлу с помощью хука wp_handle_upload
  7. Обработка ошибок при загрузке файла с использованием хука wp_handle_upload
  8. Вопросы и ответы
  9. Как получить имя загруженного файла?
  10. Как получить URL загруженного файла?
  11. Как получить MIME-тип загруженного файла?
  12. Как определить тип загрузки (upload или sideload)?
  13. Как изменить данные о загруженном файле?
  14. Как добавить дополнительные проверки перед загрузкой файла?
  15. Как обработать ошибку при загрузке файла?
  16. Как изменить путь сохранения загруженного файла?
  17. Как добавить дополнительные метаданные к загруженному файлу?
  18. Связанные элементы

Описание хука

Хук wp_handle_upload позволяет определить данные массива для загруженного файла. Он вызывается после успешной загрузки файла на сервер, но перед сохранением информации о файле в базу данных.

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

Использование

apply_filters( 'wp_handle_upload', array $upload, string $context )

Хук wp_handle_upload принимает два параметра: массив $upload с данными о загруженном файле и строку $context с типом действия загрузки. Возвращает измененный массив $upload.

  • $upload (array): Массив с данными о загруженном файле.
  • $upload['file'] (string): Имя загруженного файла.
  • $upload['url'] (string): URL загруженного файла.
  • $upload['type'] (string): MIME-тип загруженного файла.
  • $context (string): Тип действия загрузки. Допустимые значения: ‘upload’ или ‘sideload’.
<?php
/**
 * Пример использования хука wp_handle_upload.
 *
 * @param array  $upload  Массив с данными о загруженном файле.
 * @param string $context Тип действия загрузки.
 * @return array Измененный массив с данными о загруженном файле.
 */
function custom_handle_upload( $upload, $context ) {
    // Изменяем имя файла перед сохранением
    $upload['file'] = 'custom-file-name.jpg';
    // Проверяем тип файла
    if ( $upload['type'] !== 'image/jpeg' ) {
        // Выводим сообщение об ошибке
        wp_die( 'Только файлы JPEG разрешены!' );
    }
    // Добавляем дополнительные метаданные
    $upload['metadata'] = array(
        'author' => 'John Doe',
        'description' => 'Custom image',
    );
    return $upload;
}
add_filter( 'wp_handle_upload', 'custom_handle_upload', 10, 2 );

В приведенном примере кода хук wp_handle_upload используется для изменения имени загруженного файла, проверки его типа и добавления дополнительных метаданных. Функция custom_handle_upload принимает два параметра: массив $upload с данными о загруженном файле и строку $context с типом действия загрузки. Возвращает измененный массив $upload.

Примеры использования

Применение хука wp_handle_upload для изменения имени загружаемого файла


function change_upload_filename( $upload ) {
    // Получаем имя файла
    $filename = $upload['file'];
    // Генерируем новое имя файла
    $new_filename = 'new_file_name.jpg';
    // Обновляем имя файла в массиве $upload
    $upload['file'] = str_replace( $filename, $new_filename, $upload['file'] );
    return $upload;
}
add_filter( 'wp_handle_upload', 'change_upload_filename' );

В данном примере мы используем хук wp_handle_upload для изменения имени загружаемого файла. Функция change_upload_filename принимает массив данных о загружаемом файле и возвращает измененный массив. Внутри функции мы получаем текущее имя файла, генерируем новое имя файла и обновляем его в массиве $upload. Затем мы возвращаем измененный массив.

Изменение URL загруженного файла с помощью хука wp_handle_upload


function change_upload_url( $upload ) {
    // Получаем URL файла
    $url = $upload['url'];
    // Генерируем новый URL файла
    $new_url = 'https://example.com/uploads/new_file_name.jpg';
    // Обновляем URL файла в массиве $upload
    $upload['url'] = str_replace( $url, $new_url, $upload['url'] );
    return $upload;
}
add_filter( 'wp_handle_upload', 'change_upload_url' );

В данном примере мы используем хук wp_handle_upload для изменения URL загруженного файла. Функция change_upload_url принимает массив данных о загружаемом файле и возвращает измененный массив. Внутри функции мы получаем текущий URL файла, генерируем новый URL файла и обновляем его в массиве $upload. Затем мы возвращаем измененный массив.

Проверка типа загружаемого файла с использованием хука wp_handle_upload


function check_upload_file_type( $upload ) {
    // Получаем тип файла
    $file_type = $upload['type'];
    // Проверяем тип файла
    if ( $file_type !== 'image/jpeg' ) {
        // Выводим сообщение об ошибке
        wp_die( 'Only JPEG files are allowed.' );
    }
    return $upload;
}
add_filter( 'wp_handle_upload', 'check_upload_file_type' );

В данном примере мы используем хук wp_handle_upload для проверки типа загружаемого файла. Функция check_upload_file_type принимает массив данных о загружаемом файле и возвращает его без изменений, если тип файла соответствует требуемому. Если тип файла не является JPEG, мы выводим сообщение об ошибке с помощью функции wp_die.

Добавление дополнительных метаданных к загружаемому файлу с помощью хука wp_handle_upload


function add_upload_metadata( $upload ) {
    // Получаем ID загруженного файла
    $file_id = $upload['id'];
    // Добавляем метаданные к загруженному файлу
    update_post_meta( $file_id, 'custom_metadata', 'Custom metadata value' );
    return $upload;
}
add_filter( 'wp_handle_upload', 'add_upload_metadata' );

В данном примере мы используем хук wp_handle_upload для добавления дополнительных метаданных к загружаемому файлу. Функция add_upload_metadata принимает массив данных о загружаемом файле и возвращает его без изменений. Внутри функции мы получаем ID загруженного файла из массива $upload и с помощью функции update_post_meta добавляем к файлу дополнительные метаданные.

Обработка ошибок при загрузке файла с использованием хука wp_handle_upload


function handle_upload_errors( $upload ) {
    // Проверяем наличие ошибок при загрузке файла
    if ( isset( $upload['error'] ) && $upload['error'] !== 0 ) {
        // Выводим сообщение об ошибке
        wp_die( 'Error uploading file: ' . $upload['error'] );
    }
    return $upload;
}
add_filter( 'wp_handle_upload', 'handle_upload_errors' );

В данном примере мы используем хук wp_handle_upload для обработки ошибок при загрузке файла. Функция handle_upload_errors принимает массив данных о загружаемом файле и возвращает его без изменений, если ошибок при загрузке нет. Если при загрузке файла возникла ошибка, мы выводим сообщение об ошибке с помощью функции wp_die.

Вопросы и ответы

Как получить имя загруженного файла?

Имя загруженного файла можно получить из массива данных, который передается в хук wp_handle_upload. В этом массиве есть ключ file, который содержит имя файла.


add_filter( 'wp_handle_upload', 'my_handle_upload' );
function my_handle_upload( $upload ) {
    $file_name = $upload['file'];
    // Дальнейшая обработка имени файла
    return $upload;
}

Как получить URL загруженного файла?

URL загруженного файла также можно получить из массива данных, передаваемого в хук wp_handle_upload. В этом массиве есть ключ url, который содержит URL файла.


add_filter( 'wp_handle_upload', 'my_handle_upload' );
function my_handle_upload( $upload ) {
    $file_url = $upload['url'];
    // Дальнейшая обработка URL файла
    return $upload;
}

Как получить MIME-тип загруженного файла?

МIME-тип загруженного файла можно получить также из массива данных, передаваемого в хук wp_handle_upload. В этом массиве есть ключ type, который содержит MIME-тип файла.


add_filter( 'wp_handle_upload', 'my_handle_upload' );
function my_handle_upload( $upload ) {
    $mime_type = $upload['type'];
    // Дальнейшая обработка MIME-типа файла
    return $upload;
}

Как определить тип загрузки (upload или sideload)?

Для определения типа загрузки (upload или sideload) используется параметр $context в хуке wp_handle_upload. Значение этого параметра может быть ‘upload’ или ‘sideload’.


add_filter( 'wp_handle_upload', 'custom_handle_upload', 10, 2 );
function custom_handle_upload( $upload, $context ) {
    if ( $context === 'upload' ) {
        // Загрузка файла
    } elseif ( $context === 'sideload' ) {
        // Sideload загрузка файла
    }
    return $upload;
}

Как изменить данные о загруженном файле?

Для изменения данных о загруженном файле используется массив $upload в хуке wp_handle_upload. В этом массиве содержатся следующие элементы: file (имя файла), url (URL файла) и type (MIME-тип файла).


add_filter( 'wp_handle_upload', 'custom_handle_upload', 10, 2 );
function custom_handle_upload( $upload, $context ) {
    $upload['file'] = 'new-file-name.jpg';
    $upload['url'] = 'http://example.com/new-file-name.jpg';
    $upload['type'] = 'image/jpeg';
    return $upload;
}

Как добавить дополнительные проверки перед загрузкой файла?

Для добавления дополнительных проверок перед загрузкой файла используется хук wp_handle_upload_prefilter. В этом хуке можно проверить и изменить данные о загружаемом файле до его фактической загрузки.


add_filter( 'wp_handle_upload_prefilter', 'custom_handle_upload_prefilter' );
function custom_handle_upload_prefilter( $file ) {
    // Проверка и изменение данных о загружаемом файле
    if ( $file['type'] !== 'image/jpeg' ) {
        $file['error'] = 'Invalid file type.';
    }
    return $file;
}

Как обработать ошибку при загрузке файла?

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

Пример использования хука:

add_filter( 'wp_handle_upload_error', 'my_handle_upload_error' );
function my_handle_upload_error( $upload_error ) {
    // Ваш код для обработки ошибки
    return $upload_error;
}

Как изменить путь сохранения загруженного файла?

Если вы хотите изменить путь сохранения загруженного файла, вы можете использовать хук upload_dir для изменения массива данных о пути.

Пример использования хука:

add_filter( 'upload_dir', 'my_upload_dir' );
function my_upload_dir( $upload_dir ) {
    // Ваш код для изменения пути сохранения файла
    return $upload_dir;
}

Как добавить дополнительные метаданные к загруженному файлу?

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

Пример использования хука:

add_filter( 'wp_generate_attachment_metadata', 'my_generate_attachment_metadata', 10, 2 );
function my_generate_attachment_metadata( $metadata, $attachment_id ) {
    // Ваш код для добавления дополнительных метаданных
    return $metadata;
}

Хук wp_handle_upload позволяет вам фильтровать массив данных о загруженном файле и выполнять различные действия в зависимости от типа загрузки. Вы можете использовать хуки wp_handle_upload_error, upload_dir и wp_generate_attachment_metadata для обработки ошибок, изменения пути сохранения файла и добавления дополнительных метаданных соответственно.

Связанные элементы

  • Функция wp_handle_upload(): обрабатывает загруженный файл и возвращает массив с данными о загрузке.
  • Функция wp_upload_dir(): возвращает массив с информацией о директории для загрузки файлов.
  • Функция wp_mkdir_p(): создает директорию рекурсивно, если она не существует.
  • Функция wp_unique_filename(): генерирует уникальное имя файла для загрузки, чтобы избежать перезаписи существующих файлов.
  • Хук wp_handle_upload_prefilter: позволяет изменить данные о загрузке файла перед их обработкой.
  • Класс WP_Error: представляет ошибку, возникшую при загрузке файла.
Обсуждение