media_handle_sideload

Загружает файл в медиатеку WordPress из переданного массива с данными о файле, аналогично media_handle_upload().

media_handle_upload() работает напрямую с глобальным массивом $_FILES, это не всегда удобно. Иногда удобнее указать произвольные данные файла и обработать их, для этого и нужна media_handle_sideload().

Во фронтенде для работы функции нужны следующие файлы:

$id = media_handle_sideload( $file_array, $post_id, $desc = null, $post_data = array() );
$file_array(массив) (обязательный)
Массив с данными файла – аналогичный $_FILES.
$post_id(число) (обязательный)
ID поста, к которому нужно прикрепить файл после загрузки.
$desc(строка)
Описание загружаемого файла.
По умолчанию: null
$post_data(массив)

Позволяет перезаписывать данные добавляемого вложения. Указываются данные вложения, которые будут записаны в таблицу wp_posts: post_parent, post_title, post_excerpt и т.д. По умолчанию:

<?php
function media_handle_sideload( $file_array, $post_id, $desc = null, $post_data = array() ) {
	$overrides = array('test_form'=>false);

	$time = current_time( 'mysql' );
	if ( $post = get_post( $post_id ) ) {
		if ( substr( $post->post_date, 0, 4 ) > 0 )
			$time = $post->post_date;
	}

	$file = wp_handle_sideload( $file_array, $overrides, $time );
	if ( isset($file['error']) )
		return new WP_Error( 'upload_error', $file['error'] );

	$url = $file['url'];
	$type = $file['type'];
	$file = $file['file'];
	$title = preg_replace('/.[^.]+$/', '', basename($file));
	$content = '';

	// Use image exif/iptc data for title and caption defaults if possible.
	if ( $image_meta = @wp_read_image_metadata($file) ) {
		if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) )
			$title = $image_meta['title'];
		if ( trim( $image_meta['caption'] ) )
			$content = $image_meta['caption'];
	}

	if ( isset( $desc ) )
		$title = $desc;

	// Construct the attachment array.
	$attachment = array_merge( array(
		'post_mime_type' => $type,
		'guid' => $url,
		'post_parent' => $post_id,
		'post_title' => $title,
		'post_content' => $content,
	), $post_data );

	// This should never be set as it would then overwrite an existing attachment.
	unset( $attachment['ID'] );

	// Save the attachment metadata
	$id = wp_insert_attachment($attachment, $file, $post_id);
	if ( !is_wp_error($id) )
		wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );

	return $id;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *