/* загрузка картинки по заданному URL or path */
function my_media_handle_upload(
$file_url,
$post_id,
$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 = file_get_contents($file_url);
if (!empty($file)) {
$tmpfname = tempnam(sys_get_temp_dir(), 'EX_');
$temp = fopen($tmpfname, "wb");
fwrite($temp, $file);
fclose($temp);
//имитируем загрузку временного файла
$file_id = 'myfile';
$_FILES[$file_id] = array(
'name' => basename($file_url),
'type' => mime_content_type($tmpfname),
'size' => filesize($tmpfname),
'tmp_name' => $tmpfname,
);
} else {
return 0;
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-admin/includes/file.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-admin/includes/image.php';
$name = $_FILES[$file_id]['name'];
$file = _wp_handle_upload($_FILES[$file_id], $overrides, $time, 'user-export');
if ( isset($file['error']) ) {
return new WP_Error( 'upload_error', $file['error'] );
}
$name_parts = pathinfo($name);
$name = trim( substr( $name, 0, -(1 + strlen($name_parts['extension'])) ) );
$url = $file['url'];
$type = $file['type'];
$file = $file['file'];
$title = $name;
$content = '';
$excerpt = '';
if ( 0 === strpos( $type, 'image/' ) && $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'] ) ) {
$excerpt = $image_meta['caption'];
}
}
// 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_excerpt' => $excerpt,
), $post_data );
// This should never be set as it would then overwrite an existing attachment.
unset( $attachment['ID'] );
// Save the data
$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;
}