wp_generate_attachment_metadata

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

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

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

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

apply_filters( 'wp_generate_attachment_metadata', array $metadata, int $attachment_id, string $context )

Этот код вызывает хук «wp_generate_attachment_metadata» и передает ему следующие параметры:

  • $metadata (array) — Массив метаданных вложения.
  • $attachment_id (int) — ID текущего вложения.
  • $context (string) — Дополнительный контекст. Может быть ‘create’, если метаданные были созданы для нового вложения, или ‘update’, если метаданные были обновлены.
<?php
/**
 * Функция-обработчик для хука wp_generate_attachment_metadata.
 *
 * @param array  $metadata       Массив метаданных вложения.
 * @param int    $attachment_id  ID текущего вложения.
 * @param string $context        Дополнительный контекст.
 *
 * @return array Измененный массив метаданных вложения.
 */
function custom_generate_attachment_metadata( $metadata, $attachment_id, $context ) {
    // Ваш код обработки метаданных вложения здесь.
    
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'custom_generate_attachment_metadata', 10, 3 );

В приведенном выше примере кода мы создаем функцию-обработчик «custom_generate_attachment_metadata», которая принимает три параметра: $metadata, $attachment_id и $context. Внутри функции вы можете добавить свой собственный код для обработки метаданных вложения. В конце функции мы возвращаем измененный массив метаданных вложения. Затем мы добавляем эту функцию в качестве фильтра для хука «wp_generate_attachment_metadata» с приоритетом 10 и количеством аргументов 3.

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

Создание миниатюры изображения при загрузке


function generate_thumbnail_on_upload( $metadata, $attachment_id, $context ) {
    // Проверяем, что это новое вложение
    if ( 'create' === $context ) {
        // Получаем путь к оригинальному изображению
        $file = get_attached_file( $attachment_id );
        
        // Создаем миниатюру изображения
        $thumbnail = wp_get_image_editor( $file );
        if ( ! is_wp_error( $thumbnail ) ) {
            $thumbnail->resize( 150, 150, true );
            $thumbnail->save( $file );
        }
    }
    
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'generate_thumbnail_on_upload', 10, 3 );

Этот пример демонстрирует использование хука wp_generate_attachment_metadata для создания миниатюры изображения при его загрузке. Функция generate_thumbnail_on_upload принимает три параметра: $metadata (массив метаданных вложения), $attachment_id (ID текущего вложения) и $context (дополнительный контекст).

Внутри функции мы проверяем, что контекст равен ‘create’, что означает, что это новое вложение. Затем мы получаем путь к оригинальному изображению с помощью функции get_attached_file. Далее мы используем функцию wp_get_image_editor для создания объекта редактора изображений и изменяем размеры изображения до 150×150 пикселей с помощью метода resize. Наконец, мы сохраняем измененное изображение с помощью метода save.

Функция возвращает массив метаданных вложения $metadata.

Изменение размеров изображения перед сохранением


function resize_image_before_save( $metadata, $attachment_id, $context ) {
    // Проверяем, что это обновление метаданных
    if ( 'update' === $context ) {
        // Получаем путь к оригинальному изображению
        $file = get_attached_file( $attachment_id );
        
        // Создаем объект редактора изображений
        $editor = wp_get_image_editor( $file );
        if ( ! is_wp_error( $editor ) ) {
            // Изменяем размеры изображения
            $editor->resize( 800, 600, true );
            $editor->save( $file );
        }
    }
    
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'resize_image_before_save', 10, 3 );

В этом примере мы используем хук wp_generate_attachment_metadata для изменения размеров изображения перед его сохранением. Функция resize_image_before_save принимает те же параметры, что и предыдущая функция.

Внутри функции мы проверяем, что контекст равен ‘update’, что означает, что это обновление метаданных. Затем мы получаем путь к оригинальному изображению с помощью функции get_attached_file. Далее мы создаем объект редактора изображений с помощью функции wp_get_image_editor и изменяем размеры изображения до 800×600 пикселей с помощью метода resize. Наконец, мы сохраняем измененное изображение с помощью метода save.

Функция возвращает массив метаданных вложения $metadata.

Добавление дополнительных метаданных к вложению


function add_additional_metadata( $metadata, $attachment_id, $context ) {
    // Проверяем, что это новое вложение
    if ( 'create' === $context ) {
        // Добавляем дополнительные метаданные
        $metadata['additional_data'] = 'Some additional data';
    }
    
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'add_additional_metadata', 10, 3 );

В этом примере мы используем хук wp_generate_attachment_metadata для добавления дополнительных метаданных к вложению при его создании. Функция add_additional_metadata принимает те же параметры, что и предыдущие функции.

Внутри функции мы проверяем, что контекст равен ‘create’, что означает, что это новое вложение. Затем мы добавляем дополнительные метаданные в массив $metadata с помощью ключа ‘additional_data’.

Функция возвращает массив метаданных вложения $metadata.

Обновление метаданных вложения при изменении изображения


function update_attachment_metadata( $metadata, $attachment_id, $context ) {
    // Проверяем, что это обновление метаданных
    if ( 'update' === $context ) {
        // Обновляем метаданные вложения
        $metadata['updated_data'] = 'Some updated data';
    }
    
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'update_attachment_metadata', 10, 3 );

В этом примере мы используем хук wp_generate_attachment_metadata для обновления метаданных вложения при изменении изображения. Функция update_attachment_metadata принимает те же параметры, что и предыдущие функции.

Внутри функции мы проверяем, что контекст равен ‘update’, что означает, что это обновление метаданных. Затем мы обновляем метаданные вложения в массиве $metadata с помощью ключа ‘updated_data’.

Функция возвращает массив метаданных вложения $metadata.

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

Как изменить сгенерированные метаданные в хуке wp_generate_attachment_metadata?

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

Пример использования фильтра wp_generate_attachment_metadata:

// Определяем функцию-обработчик фильтра
function my_custom_attachment_metadata( $metadata, $attachment_id, $context ) {
    // Ваш код для изменения метаданных
    return $metadata;
}
// Добавляем функцию-обработчик в хук
add_filter( 'wp_generate_attachment_metadata', 'my_custom_attachment_metadata', 10, 3 );

Как добавить дополнительные поля в массив метаданных в хуке wp_generate_attachment_metadata?

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

Пример использования фильтра wp_generate_attachment_metadata для добавления дополнительного поля:

// Определяем функцию-обработчик фильтра
function my_custom_attachment_metadata( $metadata, $attachment_id, $context ) {
    // Добавляем дополнительное поле в массив метаданных
    $metadata['my_custom_field'] = 'Custom Value';
    return $metadata;
}
// Добавляем функцию-обработчик в хук
add_filter( 'wp_generate_attachment_metadata', 'my_custom_attachment_metadata', 10, 3 );

Как получить доступ к текущему ID в хуке wp_generate_attachment_metadata?

Для получения доступа к текущему ID в хуке wp_generate_attachment_metadata можно использовать параметр $attachment_id, который передается в функцию-обработчик фильтра.

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

// Определяем функцию-обработчик фильтра
function my_custom_attachment_metadata( $metadata, $attachment_id, $context ) {
    // Используем текущий ID в коде
    $attachment_title = get_the_title( $attachment_id );
    // Ваш код
    return $metadata;
}
// Добавляем функцию-обработчик в хук
add_filter( 'wp_generate_attachment_metadata', 'my_custom_attachment_metadata', 10, 3 );

Как изменить контекст в хуке wp_generate_attachment_metadata?

Для изменения контекста в хуке wp_generate_attachment_metadata можно использовать фильтр ‘wp_generate_attachment_metadata’.

Пример кода:


function change_attachment_metadata_context( $metadata, $attachment_id, $context ) {
    // Ваш код для изменения контекста
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'change_attachment_metadata_context', 10, 3 );

Как добавить свою функцию обработки метаданных в хуке wp_generate_attachment_metadata?

Для добавления своей функции обработки метаданных в хуке wp_generate_attachment_metadata можно использовать фильтр ‘wp_generate_attachment_metadata’.

Пример кода:


function custom_attachment_metadata_handler( $metadata, $attachment_id, $context ) {
    // Ваш код для обработки метаданных
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'custom_attachment_metadata_handler', 10, 3 );

Как удалить определенные метаданные из массива в хуке wp_generate_attachment_metadata?

Для удаления определенных метаданных из массива в хуке wp_generate_attachment_metadata можно использовать фильтр ‘wp_generate_attachment_metadata’.

Пример кода:


function remove_specific_metadata( $metadata, $attachment_id, $context ) {
    // Ваш код для удаления определенных метаданных
    unset( $metadata['specific_metadata'] );
    return $metadata;
}
add_filter( 'wp_generate_attachment_metadata', 'remove_specific_metadata', 10, 3 );

Как обновить метаданные при обновлении вложения в хуке wp_generate_attachment_metadata?

Для обновления метаданных при обновлении вложения в хуке wp_generate_attachment_metadata можно использовать фильтр apply_filters().


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

Как использовать хук wp_generate_attachment_metadata для создания дополнительных размеров изображений?

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


function generate_additional_image_sizes($metadata, $attachment_id, $context) {
    // Проверяем, что вложение является изображением
    if (wp_attachment_is_image($attachment_id)) {
        // Создаем дополнительные размеры изображения
        $additional_sizes = array(
            'thumbnail' => array(
                'width' => 150,
                'height' => 150,
                'crop' => true
            ),
            'medium' => array(
                'width' => 300,
                'height' => 300,
                'crop' => false
            )
        );
        foreach ($additional_sizes as $size => $args) {
            $resized = image_make_intermediate_size($attachment_id, $args['width'], $args['height'], $args['crop']);
            if ($resized) {
                $metadata['sizes'][$size] = $resized;
            }
        }
    }
    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'generate_additional_image_sizes', 10, 3);

Как проверить, были ли изменены метаданные в хуке wp_generate_attachment_metadata?

Для проверки, были ли изменены метаданные в хуке wp_generate_attachment_metadata, можно сравнить новые метаданные с предыдущими значениями.


function check_metadata_changes($metadata, $attachment_id, $context) {
    // Получаем предыдущие метаданные
    $previous_metadata = wp_get_attachment_metadata($attachment_id);
    // Сравниваем новые и предыдущие метаданные
    if ($metadata != $previous_metadata) {
        // Метаданные были изменены
        // Ваш код для обработки изменений
    }
    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'check_metadata_changes', 10, 3);

Хук wp_generate_attachment_metadata предоставляет возможность изменять и обрабатывать метаданные вложений в WordPress. С помощью этого хука можно обновлять метаданные при обновлении вложения, создавать дополнительные размеры изображений и проверять изменения метаданных. Используйте этот хук для более гибкого управления вложениями в WordPress.

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

  • Функция wp_get_attachment_metadata(): возвращает метаданные вложения.
  • Функция wp_update_attachment_metadata(): обновляет метаданные вложения.
  • Функция wp_delete_attachment_files(): удаляет файлы вложения.
  • Хук wp_update_attachment_metadata: вызывается после обновления метаданных вложения.
  • Класс WP_Image_Editor: предоставляет методы для редактирования изображений.
  • Класс WP_Image_Editor_Imagick: реализация класса WP_Image_Editor с использованием библиотеки Imagick.
  • Класс WP_Image_Editor_GD: реализация класса WP_Image_Editor с использованием библиотеки GD.
Обсуждение