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