wp_insert_attachment()
Додає медіафайл (вкладення) у медіатеку WordPress. Файл фізично не додається – функція створює запис у таблиці wp_posts у базі даних та повертає ID створеного запису.
Ця функція – одна з функцій низького рівня API, яка використовується в WordPress для вставки вкладень.
Функцію потрібно використовувати у зв’язці з функціями: wp_update_attachment_metadata() .
Щоб фізично завантажити файл і створити запис цього файлу в базі даних, зазвичай використовується функція media_handle_upload() .
wp_insert_post()
Хуків немає.
Повертає
int|WP_Error
. ID запису у разі успішного додавання та 0 при невдачі. WP_Error об’єкт у разі невдачі, якщо вказано параметр $wp_error (з версії 4.7).
Використання
wp_insert_attachment( $attachment, $filename, $parent_post_id, $wp_error, $fire_after_hooks );
-
$attachment
(масив) (обов’язковий) Масив даних про вкладення, що додається, який буде записаний в БД в таблицю wp_posts. Обов’язково повинен містити мінімум ці дані: post_title, post_content (у значенні вказується порожній рядок), post_status, guid і post_mime_type :
$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' );
-
$filename
(рядок) -
Розташування файлу на сервері. Використовуйте абсолютний шлях, а не УРЛ. Шлях повинен вказувати на директорію завантажень WordPress-
uploads
. Дивіться
wp_upload_dir() .
Типово: false -
$parent_post_id
(число) -
ID посту (запису) до якого повинен відноситися медіафайл, що додається. Тут вказуємо ID поста-батька.
За замовчуванням: 0 -
$wp_error
(логічний) (WP 4.7) -
Ставимо true, якщо у разі помилки потрібно повернути об’єкт
WP_Error .
Типово: false -
$fire_after_hooks
(логічний) (WP 5.6) -
Чи потрібно запускати функцію
wp_after_insert_post() , яка запускає хуки наприкінці роботи функції.
Типово: true
Приклади
#1 Додамо записи про файл до бази даних WP
Передбачається, що фізично файл вже завантажений у директорію uploads і тепер нам потрібно додати запис про цей файл до бази даних WordPress. Також, прикріпимо запис до посту 37:
// файл повинен бути у директорії завантажень WP. $filename = '/path/to/uploads/2013/03/filname.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 ); // Підключимо потрібний файл, якщо він ще не підключений // wp_generate_attachment_metadata() залежить від цього файлу. 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_relative_upload_path() , щоб створити guid може бути неможливим на деяких серверах.
нотатки
- Дивіться: wp_insert_post()
список змін
З версії 2.0.0 | Введено. |
З версії 4.7.0 | Added $wp_error parameter to allow a WP_Error для того, щоб відновити на failure. |
З версії 5.6.0 | Added the $fire_after_hooks parameter. |
Код wp_insert_attachment() wp insert attachment WP 6.0.2
function wp_insert_attachment( $args, $file = false, $parent = 0, $wp_error = false, $fire_after_hooks = true ) { $defaults = array( 'file' => $file, 'post_parent' => 0, ); $ data = wp_parse_args ($ args, $ defaults); if ( ! empty( $parent ) ) { $data['post_parent'] = $parent; } $data['post_type'] = 'attachment'; return wp_insert_post( $data, $wp_error, $fire_after_hooks ); }