1) я бы написал свой функционал импорта (+ чтобы можно было контролировать расходование памяти - загрузка небольшими частями)
2) если возможно ситуация что у разных товаров могут быть одинаковые изображения - то хорошо бы организовать перед загрузкой что-то типа:
public function get_attachment_by_hash($hash_file)
{
if ( !$hash_file ) return 0;
$attachments = get_posts(array(
'numberposts' => 1,
'post_type' => 'attachment',
'post_status' => 'inherit',
'meta_query' => array(
array(
'key' => 'hash_file',
'value' => $hash_file
)
)
));
if (!is_array($attachments) or !count($attachments)) return 0;
if ($attachments[0]->ID)
return $attachments[0]->ID;
else
return 0;
//update_post_meta( $attachment_id, 'photo_title', $metadata['image_meta']['title'] );
}
$tmp_file = download_url( $_first_pic, 600 );
if ( is_wp_error( $tmp_file ) ) {
$this->error($tmp_file->get_error_messages());
return '';
} else {
$hash_file = hash_file('md5', $tmp_file);
$this->log("md5 hash file: $hash_file");
$this->log("download image: $_first_pic");
}
$att_id = $this->get_attachment_by_hash($hash_file);
if ($att_id) {
//find attachment duplicate ID: $att_id
} else {
$att_id = media_handle_sideload( array(
'name' => preg_replace('/\?.*/', '', basename($_first_pic)),
'tmp_name' => $tmp_file,
), $this->product_id, $title);
if ( is_wp_error( $att_id ) ) {
$this->error($att_id->get_error_messages());
} else {
update_post_meta($att_id, 'hash_file', $hash_file);
set_post_thumbnail($this->product_id, $att_id);
}
}
в целом я как-то запихивал в БД WooCommerc'а из CSV около 20 тыс. товаров - никаких подвисаний и проблем не было в общем-то )