Всем привет!
Есть сайт на
wordpress и я планирую создавать посты с миниатюрами получаемыми с внешнего
url посредством загрузки через
RestAPI. Непосредственно сам процесс создания постов я настроил:
$post_data = array(
'post_title' => sanitize_text_field( $name ),
'post_content' => $content,
'post_category' => array(1),
'post_status' => 'publish',
'post_type' => 'post',
'post_author' => 1
);
$post_id = wp_insert_post( $post_data );
а изображения получаю с помощью функции
$image_id = wp_insert_attachment_by_url( $url, $post_id );
которая описана в
гисте по ссылке
Но, при этом, при генерации миниатюры в папке остаётся копия скачанного изображения, которое теперь занимает лишнее место на диске.
И теперь у меня остался вопрос: как удалять исходники изображений полученных во временной папке при помощи
download_url, но при этом, чтобы сама сохранялась миниатюра (thumbnail)?
function wp_insert_attachment_by_url( $url, $post_ID ) {
require_once( ABSPATH . 'wp-admin/includes/media.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
if ( '' == $post_ID )
return new WP_Error( 'insert_attachment_failed', __( 'Invalid post ID' ) );
if( !empty( $url ) ){
$url = esc_url( $url );
/**
* Set variables for storage, fix file
* filename for query strings.
*/
preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches );
if ( ! $matches ) {
return new WP_Error( 'insert_attachment_failed', __( 'Invalid image URL' ) );
}
$file_array = array();
$file_array['name'] = basename( $matches[0] );
/**
* Download file to temp location.
*/
$file_array['tmp_name'] = download_url( $url );
/**
* Check for download errors
* if there are error unlink the temp file name
*/
if ( is_wp_error( $file_array['tmp_name'] ) ) {
return $file_array['tmp_name'];
}
$image_ID = media_handle_sideload( $file_array, $post_ID );
/**
* If error storing permanently, unlink.
*/
if ( is_wp_error( $image_ID ) ) {
@unlink( $file_array['tmp_name'] );
return $image_ID;
}
/**
* If error thumbnail
*/
if ( false === set_post_thumbnail( $post_ID, $image_ID ) ) {
return new WP_Error( 'insert_attachment_failed', __( 'Problem to set post thumbnail' ) );
}
return $image_ID;
}else{
return new WP_Error( 'insert_attachment_failed', __( 'Insert URL' ) );
}
}