WP_INSERT_ATTACHMENT() – Как добавить вложение в WordPress

# WP_INSERT_ATTACHMENT() │ WP 2.0.0

Функция wp_insert_attachment() позволяет добавить вложение в WordPress. В этой статье мы разберем, как использовать эту функцию, а также что такое вложение и как работает этот процесс.

## Основные понятия

### Что такое вложение?

Вложение — это любой медиа-файл (например, изображение или видео), который можно прикрепить к записи или странице в WordPress. Эти файлы хранятся в библиотеке медиа.

## Параметры функции

Функция wp_insert_attachment() принимает несколько параметров. Давайте рассмотрим их:

- $args (обязательный): Массив или строка с аргументами для создания вложения.
- $file (по умолчанию: false): Имя файла. Если файл уже загружен, укажите путь.
- $parent_post_id (по умолчанию: 0): ID родительской записи, к которой вы прикрепляете вложение.
- $wp_error (по умолчанию: false): Если true, функция вернет объект WP_Error в случае ошибки.
- $fire_after_hooks (по умолчанию: true): Если true, после вставки вызовутся хуки.

## Возвращаемое значение

Функция возвращает:
- ID вложения при успешном выполнении.
- 0 или объект WP_Error в случае ошибки.

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

### Пример 1: Добавление файла вложения в базу данных WordPress

Предположим, что файл уже загружен в директорию загрузок. Теперь нужно добавить его в базу данных WordPress и прикрепить к записи с ID 37.

```php
// Файл должен находиться в директории загрузок WordPress.
$filename = '/path/to/uploads/2013/03/filename.jpg';

// ID записи, к которой мы прикрепляем файл.
$parent_post_id = 37;

// Проверяем тип файла для поля 'post_mime_type'.
$filetype = wp_check_filetype(basename($filename), null);

// Получаем путь к директории загрузок.
$wp_upload_dir = wp_upload_dir();

// Подготавливаем массив с необходимыми данными.
$attachment = array(
    'guid'           => $wp_upload_dir['url'] . '/' . basename($filename), 
    'post_mime_type' => $filetype['type'],
    'post_title'     => preg_replace('/.[^.]+$/', '', basename($filename)),
    'post_content'   => '',
    'post_status'    => 'inherit'
);

// Вставляем вложение в базу данных.
$attach_id = wp_insert_attachment($attachment, $filename, $parent_post_id);

// Подключаем необходимые функции для создания метаданных.
require_once( ABSPATH . 'wp-admin/includes/image.php' );

// Создаем метаданные для вложения и обновляем запись в базе данных.
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);

Пример 2: Вложение с подписью и описанием

Если вы хотите сделать медиа-вложение с подписью и описанием, используйте следующие поля:

$attach_id = wp_insert_attachment(
    array(
        'guid' => $upload['url'],
        'post_title' => sanitize_text_field($title),
        'post_excerpt' => sanitize_text_field($caption),
        'post_content' => sanitize_text_field($description),
        'post_mime_type' => $response_headers['content-type'],
    ),
    $upload['file'],
    0
);

// Подключаем необходимые функции для создания метаданных.
require_once( ABSPATH . 'wp-admin/includes/image.php' );

// Создаем метаданные для вложения и обновляем запись в базе данных.
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);

Заметки

  • Эта функция используется для работы с вложениями. Если вы хотите внести изменения в записи или страницы, используйте функцию wp_insert_post().

Изменения в функции

  • Версия 2.0.0: функция была введена.
  • Версия 4.7.0: добавлен параметр $wp_error для возможности возврата WP_Error в случае неудачи.
  • Версия 5.6.0: добавлен параметр $fire_after_hooks.

Связанные функции

Функция wp_insert_attachment() тесно связана с другими функциями для работы с вложениями и записями:

  • wp_insert_post()
  • wp_insert_category()
  • wp_generate_attachment_metadata()
  • wp_update_attachment_metadata()

Эти функции помогут вам более эффективно работать с медиа-файлами в WordPress.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *