Automattic\WooCommerce\Internal\CLI\Migrator\Core
ProductsController::parse_field_selection
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() 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;
}