Automattic\WooCommerce\Internal\CLI\Migrator\Commands

ProductsCommand::__invokepublicWC 1.0

The main execution logic for the command.

[--platform=<platform>]
The platform to migrate products from.
--- default: shopify
---
[--count]
Only fetch and display the total product count.
[--limit=<limit>]
Maximum number of products to migrate.
[--status=<status>]
Filter products by status (active, archived, draft).
[--product-type=<product-type>]
Filter products by type (for Shopify: any product type name, or 'single'/'variable' for WooCommerce equivalents).
[--vendor=<vendor>]
Filter products by vendor name.
[--ids=<ids>]
Comma-separated list of product IDs to migrate.
[--batch-size=<size>]
Number of products to process per batch (default: 20, max: 250).
[--fields=<fields>]
Comma-separated list of fields to migrate.
[--exclude-fields=<fields>]
Comma-separated list of fields to exclude from migration.
[--resume]
Resume from previous migration session without prompting.
[--skip-existing]
Skip products that already exist in WooCommerce.
[--dry-run]
Perform a dry run without creating products.
[--verbose]
Show detailed progress information including warnings and errors.
[--assign-default-category]
Assign WooCommerce default category to products that have no categories.

EXAMPLES

wp wc migrate products --count
wp wc migrate products --count --status=active
wp wc migrate products --count --product-type="T-Shirt"
wp wc migrate products --count --vendor="My Brand"
wp wc migrate products --limit=100 --batch-size=25
wp wc migrate products --product-type="single" --status=active --limit=50
wp wc migrate products --ids="123,456,789"
wp wc migrate products --fields=name,price,sku --resume
wp wc migrate products --verbose --limit=50
wp wc migrate products --assign-default-category --limit=100

Method of the class: ProductsCommand{}

No Hooks.

Returns

null. Nothing (null).

Usage

$ProductsCommand = new ProductsCommand();
$ProductsCommand->__invoke( $args, $assoc_args ): void;
$args(array) (required)
The positional arguments.
$assoc_args(array) (required)
The associative arguments.

ProductsCommand::__invoke() code WC 10.8.1

public function __invoke( array $args, array $assoc_args ): void {
	// Resolve and validate the platform.
	$platform              = $this->platform_registry->resolve_platform( $assoc_args );
	$platform_display_name = $this->platform_registry->get_platform_display_name( $platform );

	if ( ! $this->credential_manager->has_credentials( $platform ) ) {
		WP_CLI::log( "Credentials for '{$platform_display_name}' not found. Let's set them up." );

		// Get platform-specific credential fields and set them up.
		$required_fields = $this->platform_registry->get_platform_credential_fields( $platform );
		if ( empty( $required_fields ) ) {
			WP_CLI::error( "The platform '{$platform_display_name}' does not have configured credential fields." );
			return;
		}

		$this->credential_manager->setup_credentials( $platform, $required_fields );
		WP_CLI::success( 'Credentials saved successfully. Please run the command again to begin the migration.' );
		return;
	}

	// Handle count request if specified.
	if ( isset( $assoc_args['count'] ) ) {
		$this->handle_count_request( $platform, $platform_display_name, $assoc_args );
		return;
	}

	// Delegate actual migration logic to ProductsController with resolved platform.
	$this->products_controller->migrate_products( $assoc_args, $platform );
}