A WordPress-centric search engine for devs and theme authors



media_handle_sideload ›

Since2.6.0
Deprecatedn/a
media_handle_sideload ( $file_array, $post_id, $desc = null, $post_data = array() )
Parameters: (4)
  • (array) $file_array Array similar to a `$_FILES` upload array.
    Required: Yes
  • (int) $post_id The post ID the media is associated with.
    Required: Yes
  • (string) $desc Optional. Description of the side-loaded file. Default null.
    Required: No
    Default: null
  • (array) $post_data Optional. Post data to override. Default empty array.
    Required: No
    Default: array()
Returns:
  • (int|object) The ID of the attachment or a WP_Error on failure.
Defined at:
Codex:

Handles a side-loaded file in the same way as an uploaded file is handled by media_handle_upload().



Source

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;
}