Automattic\WooCommerce\Internal\CLI\Migrator\Core

ProductsController::parse_field_selectionprivateWC 1.0

Parse field selection from command arguments.

Method of the class: ProductsController{}

No Hooks.

Returns

Array. Selected fields to process.

Usage

// private - for code of main (parent) class only
$result = $this->parse_field_selection( $assoc_args ): array;
$assoc_args(array) (required)
Command arguments.

ProductsController::parse_field_selection() code WC 10.8.1

private function parse_field_selection( array $assoc_args ): array {
	$default_fields = array(
		'name',
		'slug',
		'description',
		'status',
		'date_created',
		'catalog_visibility',
		'categories',
		'tags',
		'price',
		'sku',
		'stock',
		'weight',
		'brand',
		'images',
		'attributes',
		'metafields',
	);

	$excluded_fields     = array();
	$explicitly_selected = false;

	if ( isset( $assoc_args['fields'] ) ) {
		$explicitly_selected = true;
		$selected_fields     = array_map( 'trim', explode( ',', $assoc_args['fields'] ) );
		$selected_fields     = array_filter( $selected_fields );

		$invalid_fields = array_diff( $selected_fields, $default_fields );
		if ( ! empty( $invalid_fields ) ) {
			WP_CLI::warning(
				sprintf(
					'Invalid field names: %s. Valid fields: %s',
					implode( ', ', $invalid_fields ),
					implode( ', ', $default_fields )
				)
			);
		}

		$fields          = array_intersect( $selected_fields, $default_fields );
		$excluded_fields = array_diff( $default_fields, $fields );
	} else {
		$fields = $default_fields;
	}

	// Handle --exclude-fields argument.
	if ( isset( $assoc_args['exclude-fields'] ) ) {
		$exclude_fields_input = array_map( 'trim', explode( ',', $assoc_args['exclude-fields'] ) );
		$excluded_fields      = array_merge( $excluded_fields, $exclude_fields_input );
		$fields               = array_diff( $fields, $exclude_fields_input );
	}

	if ( empty( $fields ) ) {
		WP_CLI::error( 'No valid fields selected for migration.' );
		return array();
	}

	// Log field selection information.
	if ( $explicitly_selected || isset( $assoc_args['exclude-fields'] ) || ! empty( $assoc_args['verbose'] ) ) {
		$include_message = sprintf( 'Including fields: %s', implode( ', ', $fields ) );
		WP_CLI::log( $include_message );
		wc_get_logger()->info( $include_message, array( 'source' => 'wc-migrator' ) );

		if ( ! empty( $excluded_fields ) ) {
			$exclude_message = sprintf( 'Excluding fields: %s', implode( ', ', array_unique( $excluded_fields ) ) );
			WP_CLI::log( $exclude_message );
			wc_get_logger()->info( $exclude_message, array( 'source' => 'wc-migrator' ) );
		}
	}

	return $fields;
}