91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Shopify mappings
 | 
						|
 *
 | 
						|
 * @package WooCommerce\Admin\Importers
 | 
						|
 */
 | 
						|
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
	exit;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Add Shopify mappings.
 | 
						|
 *
 | 
						|
 * @since 3.7.0
 | 
						|
 * @param array $mappings    Importer columns mappings.
 | 
						|
 * @param array $raw_headers Raw headers from CSV being imported.
 | 
						|
 * @return array
 | 
						|
 */
 | 
						|
function wc_importer_shopify_mappings( $mappings, $raw_headers ) {
 | 
						|
	// Only map if this is looks like a Shopify export.
 | 
						|
	if ( 0 !== count( array_diff( array( 'Title', 'Body (HTML)', 'Type', 'Variant SKU' ), $raw_headers ) ) ) {
 | 
						|
		return $mappings;
 | 
						|
	}
 | 
						|
	$shopify_mappings = array(
 | 
						|
		'Variant SKU'               => 'sku',
 | 
						|
		'Title'                     => 'name',
 | 
						|
		'Body (HTML)'               => 'description',
 | 
						|
		'Quantity'                  => 'stock_quantity',
 | 
						|
		'Variant Inventory Qty'     => 'stock_quantity',
 | 
						|
		'Image Src'                 => 'images',
 | 
						|
		'Variant Image'             => 'images',
 | 
						|
		'Variant SKU'               => 'sku',
 | 
						|
		'Variant Price'             => 'sale_price',
 | 
						|
		'Variant Compare At Price'  => 'regular_price',
 | 
						|
		'Type'                      => 'category_ids',
 | 
						|
		'Tags'                      => 'tag_ids_spaces',
 | 
						|
		'Variant Grams'             => 'weight',
 | 
						|
		'Variant Requires Shipping' => 'meta:shopify_requires_shipping',
 | 
						|
		'Variant Taxable'           => 'tax_status',
 | 
						|
	);
 | 
						|
	return array_merge( $mappings, $shopify_mappings );
 | 
						|
}
 | 
						|
add_filter( 'woocommerce_csv_product_import_mapping_default_columns', 'wc_importer_shopify_mappings', 10, 2 );
 | 
						|
 | 
						|
/**
 | 
						|
 * Add special wildcard Shopify mappings.
 | 
						|
 *
 | 
						|
 * @since 3.7.0
 | 
						|
 * @param array $mappings    Importer columns mappings.
 | 
						|
 * @param array $raw_headers Raw headers from CSV being imported.
 | 
						|
 * @return array
 | 
						|
 */
 | 
						|
function wc_importer_shopify_special_mappings( $mappings, $raw_headers ) {
 | 
						|
	// Only map if this is looks like a Shopify export.
 | 
						|
	if ( 0 !== count( array_diff( array( 'Title', 'Body (HTML)', 'Type', 'Variant SKU' ), $raw_headers ) ) ) {
 | 
						|
		return $mappings;
 | 
						|
	}
 | 
						|
	$shopify_mappings = array(
 | 
						|
		'Option%d Name'  => 'attributes:name',
 | 
						|
		'Option%d Value' => 'attributes:value',
 | 
						|
	);
 | 
						|
	return array_merge( $mappings, $shopify_mappings );
 | 
						|
}
 | 
						|
add_filter( 'woocommerce_csv_product_import_mapping_special_columns', 'wc_importer_shopify_special_mappings', 10, 2 );
 | 
						|
 | 
						|
/**
 | 
						|
 * Expand special Shopify columns to WC format.
 | 
						|
 *
 | 
						|
 * @since 3.7.0
 | 
						|
 * @param  array $data Array of data.
 | 
						|
 * @return array Expanded data.
 | 
						|
 */
 | 
						|
function wc_importer_shopify_expand_data( $data ) {
 | 
						|
	if ( isset( $data['meta:shopify_requires_shipping'] ) ) {
 | 
						|
		$requires_shipping = wc_string_to_bool( $data['meta:shopify_requires_shipping'] );
 | 
						|
 | 
						|
		if ( ! $requires_shipping ) {
 | 
						|
			if ( isset( $data['type'] ) ) {
 | 
						|
				$data['type'][] = 'virtual';
 | 
						|
			} else {
 | 
						|
				$data['type'] = array( 'virtual' );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		unset( $data['meta:shopify_requires_shipping'] );
 | 
						|
	}
 | 
						|
	return $data;
 | 
						|
}
 | 
						|
add_filter( 'woocommerce_product_importer_pre_expand_data', 'wc_importer_shopify_expand_data' );
 |