@greenorangeblue

Как добавить большое количество изображений товаров в WooCommerce?

Ситуация следующая:
Выполняю импорт товаров посредством стандартного импорта WooCommerce
Товаров около 700 шт.
Для каждого товара прописаны ссылки на изображения откуда сервер должен их скачать

Но с таким количеством импортируемых изображений , WooCommerce висеть в процессе импорта

Я пытался решить эту проблему двумя путями:
1. Создать сначала товары, потом подгрузить изображения (индитифицировать товары по id)
- но система всеравно виснит
2. Скачать изображения на комп, чтобы потом залить на сервер вручную и прописать ссылки уже не на сторонние ресурсы где размещены изображения а на свой сервер
- тут тоже проблема. Заключается она в том что многие файлы имеют одинаковые названия и уже при скачивании файлов, предлагается их перезапись

Я подумал, может можно реализовать второй способ иначе, создав папки с названиями в виде sku, потом загрузить на сервер папки и прописать ссылки в CSV
Этот способ также привлекателен тем, что он помогает организовать медиафайлы на сервере
Но я не совсем понимаю как это сделать

Допустим я массово создал папки с SKU
А как сделать так, чтобы изображения загрузились, каждое в свою папку?

p.s. Может ещё какой то способ есть?
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
@easycode
не боюсь задавать глупые вопросы ))
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 тыс. товаров - никаких подвисаний и проблем не было в общем-то )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы