wp_insert_attachment() WP 2.0.0

Додає медіафайл (вкладення) у медіатеку 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

Приклади

0

#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 може бути неможливим на деяких серверах.

нотатки

список змін

З версії 2.0.0Введено.
З версії 4.7.0Added $wp_error parameter to allow a WP_Error для того, щоб відновити на failure.
З версії 5.6.0Added the $fire_after_hooks parameter.

Код 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *