WC_Product_CSV_Importer::expand_data( array $data )
Expand special and internal data into the correct formats for the product CRUD.
Description Description
Parameters Parameters
- $data
-
(Required) Data to import.
Return Return
(array)
Source Source
File: includes/import/class-wc-product-csv-importer.php
protected function expand_data( $data ) { $data = apply_filters( 'woocommerce_product_importer_pre_expand_data', $data ); // Images field maps to image and gallery id fields. if ( isset( $data['images'] ) ) { $images = $data['images']; $data['raw_image_id'] = array_shift( $images ); if ( ! empty( $images ) ) { $data['raw_gallery_image_ids'] = $images; } unset( $data['images'] ); } // Type, virtual and downloadable are all stored in the same column. if ( isset( $data['type'] ) ) { $data['type'] = array_map( 'strtolower', $data['type'] ); $data['virtual'] = in_array( 'virtual', $data['type'], true ); $data['downloadable'] = in_array( 'downloadable', $data['type'], true ); // Convert type to string. $data['type'] = current( array_diff( $data['type'], array( 'virtual', 'downloadable' ) ) ); if ( ! $data['type'] ) { $data['type'] = 'simple'; } } // Status is mapped from a special published field. if ( isset( $data['published'] ) ) { $statuses = array( -1 => 'draft', 0 => 'private', 1 => 'publish', ); $data['status'] = isset( $statuses[ $data['published'] ] ) ? $statuses[ $data['published'] ] : -1; unset( $data['published'] ); } if ( isset( $data['stock_quantity'] ) ) { if ( '' === $data['stock_quantity'] ) { $data['manage_stock'] = false; $data['stock_status'] = isset( $data['stock_status'] ) ? $data['stock_status'] : true; } else { $data['manage_stock'] = true; } } // Stock is bool or 'backorder'. if ( isset( $data['stock_status'] ) ) { if ( 'backorder' === $data['stock_status'] ) { $data['stock_status'] = 'onbackorder'; } else { $data['stock_status'] = $data['stock_status'] ? 'instock' : 'outofstock'; } } // Prepare grouped products. if ( isset( $data['grouped_products'] ) ) { $data['children'] = $data['grouped_products']; unset( $data['grouped_products'] ); } // Tag ids. if ( isset( $data['tag_ids_spaces'] ) ) { $data['tag_ids'] = $data['tag_ids_spaces']; unset( $data['tag_ids_spaces'] ); } // Handle special column names which span multiple columns. $attributes = array(); $downloads = array(); $meta_data = array(); foreach ( $data as $key => $value ) { if ( $this->starts_with( $key, 'attributes:name' ) ) { if ( ! empty( $value ) ) { $attributes[ str_replace( 'attributes:name', '', $key ) ]['name'] = $value; } unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'attributes:value' ) ) { $attributes[ str_replace( 'attributes:value', '', $key ) ]['value'] = $value; unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'attributes:taxonomy' ) ) { $attributes[ str_replace( 'attributes:taxonomy', '', $key ) ]['taxonomy'] = wc_string_to_bool( $value ); unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'attributes:visible' ) ) { $attributes[ str_replace( 'attributes:visible', '', $key ) ]['visible'] = wc_string_to_bool( $value ); unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'attributes:default' ) ) { if ( ! empty( $value ) ) { $attributes[ str_replace( 'attributes:default', '', $key ) ]['default'] = $value; } unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'downloads:name' ) ) { if ( ! empty( $value ) ) { $downloads[ str_replace( 'downloads:name', '', $key ) ]['name'] = $value; } unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'downloads:url' ) ) { if ( ! empty( $value ) ) { $downloads[ str_replace( 'downloads:url', '', $key ) ]['url'] = $value; } unset( $data[ $key ] ); } elseif ( $this->starts_with( $key, 'meta:' ) ) { $meta_data[] = array( 'key' => str_replace( 'meta:', '', $key ), 'value' => $value, ); unset( $data[ $key ] ); } } if ( ! empty( $attributes ) ) { // Remove empty attributes and clear indexes. foreach ( $attributes as $attribute ) { if ( empty( $attribute['name'] ) ) { continue; } $data['raw_attributes'][] = $attribute; } } if ( ! empty( $downloads ) ) { $data['downloads'] = array(); foreach ( $downloads as $key => $file ) { if ( empty( $file['url'] ) ) { continue; } $data['downloads'][] = array( 'name' => $file['name'] ? $file['name'] : wc_get_filename_from_url( $file['url'] ), 'file' => $file['url'], ); } } if ( ! empty( $meta_data ) ) { $data['meta_data'] = $meta_data; } return $data; }