Как быстро создать 99999 простых товаров?

Нужно загрузить в woocommerce 99999 простых скачиваемых товаров, которые отличаются друг от друга только именем, артикулом, и числом в URL адресе. Вот так выглядит кусок .csv файла, что я пытаюсь загрузить на сайт.

"Артикул";"Имя";"В наличии?";"Запасы";"Базовая цена";"URL загрузки";"Лимит загрузок";"Тип"
"00001";"00001";1;1;99;"/ticket.png?number=00001";1;"simple, downloadable"
"00002";"00002";1;1;99;"/ticket.php?number=00002";1;"simple, downloadable"
"00003";"00003";1;1;99;"/ticket.php?number=00003";1;"simple, downloadable"
"00004";"00004";1;1;99;"/ticket.php?number=00004";1;"simple, downloadable"
"00005";"00005";1;1;99;"/ticket.php?number=00005";1;"simple, downloadable"
"00006";"00006";1;1;99;"/ticket.php?number=00006";1;"simple, downloadable"
"00007";"00007";1;1;99;"/ticket.php?number=00007";1;"simple, downloadable"
"00008";"00008";1;1;99;"/ticket.php?number=00008";1;"simple, downloadable"
"00009";"00009";1;1;99;"/ticket.php?number=00009";1;"simple, downloadable"


Загружается это ооооочень долго. Вот думаю - может быть SQL-запросом проще это сделать и быстрее? Или есть какое-то решение еще лучше?
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 2
azerphoenix
@azerphoenix
Java Software Engineer
Добавлять товары или записи SQL запросом не лучшая идея, так как в этом случае вы обходите ВП.
Лучше использовать возможности Woocommerce REST API. Или как вариант плаоин WP All Import + Woocommerce Addon и импорт из CSV файла.
Ответ написан
Комментировать
wppanda5
@wppanda5 Куратор тега WooСommerce
WordPress Mедведь
Закидывать на прямую нельзя, можно конечно, но возможно всякое не приятное, поскольку при добавлении записи происходит много всего

Вот так потестите сколько максимально и за один проход записей стандартными средствами можете закинуть. тут все есть кроме подтянуть миниатюру.

<?php
	/**
	 * @package TAXO CRM
	 * @author  WP_Panda
	 * @version 0.2.1
	 */

	require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

	$metas = [
		'key_1' => 1,
		'key_2' => 1,
		'key_3' => 1,
		'key_3' => 1
	];

	$post_data = [
		'post_content'  => 'Контент контент контент',
		'post_status'   => 'publish',
		'post_author'   => 1,
		'post_category' => [ 8, 39 ]
	];

	$start = microtime(true);

	$i = 1;
	while ( $i <= 1000 ) {
		$post_data[ 'post_title' ] = 'Запись ' . $i;

		$post_id = wp_insert_post( $post_data );

		foreach ( $metas as $meta_key => $meta_val ) {
			update_post_meta( $post_id, $meta_key, $meta_val );
		}

		$i ++;
	}

	$time = microtime(true) - $start;
	printf( 'Время выполнения: %s мс', $time );


У меня 1000 на слабом шареде залетела за 24 секунды.

Соответственно с учетом того, что ваш файл в 99 раз больше позиций содержит, оборачиваете это например в аякс обработчик в котором будет указание какие строки лить, ибо 99к за раз многовато и надо будет поступательно, соответственно минут за 40-45 зальется у вас все

Если вместо
update_post_meta
использовать
add_metadata

Будет еще быстрее
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы