WordPress: effettuare il download di immagini remote

WordPress ci permette di effettuare il dowload di immagini remote.

La soluzione รจ la seguente.


function my_download_image( $url ) {
    if( !filter_var( $url, FILTER_VALIDATE_URL ) ) {
        return null;
    }

	$response = wp_remote_get( $url );

    if( is_wp_error( $response ) ) {
        return null;
    }
    $download_dir = wp_upload_dir( date('Y/m', time() ) );
	$valid_extensions_map = array(
		'image/jpeg' => 'jpg',
		'image/png'  => 'png',
		'image/gif'  => 'gif',
		'image/bmp'  => 'bmp',
		'image/tiff' => 'tif'
	);
	$temp_file = tempnam( sys_get_temp_dir(), 'MY' );
	file_put_contents( $temp_file, $response['body'] );
	$mime = wp_get_image_mime( $temp_file );
	unlink( $temp_file );

    if( !isset( $valid_extensions_map[$mime] ) ) {
        return null;
    }

	$image = [];
	$image['mime_type'] = $mime;
	$image['ext'] = $valid_extensions_map[$mime];
	$image['filename'] = md5( uniqid() ) . '.' . $image['ext'];
	$image['base_path'] = rtrim( $download_dir['path'], DIRECTORY_SEPARATOR );
	$image['base_url'] = rtrim( $download_dir['url'], '/' );
	$image['path'] = $image['base_path'] . DIRECTORY_SEPARATOR . $image['filename'];
	$image['url'] = $image['base_url'] . '/' . $image['filename'];

	file_put_contents( $image['path'], $response['body'] );

	return $image;
}

Torna su