Automattic\WooCommerce\Internal\CLI\Migrator\Core

ProductsController::simulate_import_batchprivateWC 1.0

Simulate the import process for dry-run mode.

Method of the class: ProductsController{}

No Hooks.

Returns

Array. Simulated batch results matching real import format.

Usage

// private - for code of main (parent) class only
$result = $this->simulate_import_batch( $mapped_products ): array;
$mapped_products(array) (required)
Array of mapped product data.

ProductsController::simulate_import_batch() code WC 10.8.1

private function simulate_import_batch( array $mapped_products ): array {
	$results = array();
	$stats   = array(
		'successful' => 0,
		'failed'     => 0,
		'skipped'    => 0,
	);

	foreach ( $mapped_products as $product_data ) {
		$product_name = $product_data['name'] ?? 'Unknown Product';

		if ( empty( $product_data['name'] ) ) {
			$results[] = array(
				'status'  => 'error',
				'message' => 'Product name is required',
				'data'    => $product_data,
			);
			++$stats['failed'];
			$this->simulate_stats_increment( 'errors_encountered' );
			continue;
		}

		$existing_product_id = null;
		if ( ! empty( $product_data['sku'] ) ) {
			$existing_product_id = wc_get_product_id_by_sku( $product_data['sku'] );
		}

		$would_skip = false;
		if ( $existing_product_id && $this->parsed_args['skip_existing'] ) {
			$would_skip = true;
		}

		if ( $would_skip ) {
			$results[] = array(
				'status'  => 'skipped',
				'message' => "Product '{$product_name}' would be skipped (already exists)",
				'data'    => $product_data,
			);
			++$stats['skipped'];
			$this->simulate_stats_increment( 'products_skipped' );
		} else {
			$results[] = array(
				'status'  => 'success',
				'message' => "Product '{$product_name}' would be imported",
				'data'    => $product_data,
			);
			++$stats['successful'];

			if ( $existing_product_id ) {
				$this->simulate_stats_increment( 'products_updated' );
			} else {
				$this->simulate_stats_increment( 'products_created' );
			}

			if ( in_array( 'images', $this->fields_to_process, true ) && ! empty( $product_data['images'] ) ) {
				$image_count = is_array( $product_data['images'] ) ? count( $product_data['images'] ) : 1;
				for ( $i = 0; $i < $image_count; $i++ ) {
					$this->simulate_stats_increment( 'images_processed' );
				}
			}
		}

		wc_get_logger()->info( "DRY RUN: Would import product '{$product_name}'", array( 'source' => 'wc-migrator' ) );
	}

	return array(
		'results' => $results,
		'stats'   => $stats,
	);
}