From 9b925d28ec07be936e3c3c874534aedaa2aad3a3 Mon Sep 17 00:00:00 2001 From: claudiulodro Date: Fri, 26 May 2017 13:30:17 -0700 Subject: [PATCH] Grouped product child support --- ...ass-wc-product-csv-importer-controller.php | 3 ++ .../export/class-wc-product-csv-exporter.php | 35 ++++++++++++++++--- .../import/class-wc-product-csv-importer.php | 1 + 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/includes/admin/importers/class-wc-product-csv-importer-controller.php b/includes/admin/importers/class-wc-product-csv-importer-controller.php index c9dc36359a3..f58069ec79f 100644 --- a/includes/admin/importers/class-wc-product-csv-importer-controller.php +++ b/includes/admin/importers/class-wc-product-csv-importer-controller.php @@ -375,6 +375,7 @@ class WC_Product_CSV_Importer_Controller { 'download_limit', 'download_expiry', 'parent_id', + 'children', 'upsell_ids', 'cross_sell_ids', 'product_url', @@ -426,6 +427,7 @@ class WC_Product_CSV_Importer_Controller { 'download_limit' => __( 'Download Limit', 'woocommerce' ), 'download_expiry' => __( 'Download Expiry Days', 'woocommerce' ), 'parent_id' => __( 'Parent', 'woocommerce' ), + 'children' => __( 'Children', 'woocommerce' ), 'upsell_ids' => __( 'Upsells', 'woocommerce' ), 'cross_sell_ids' => __( 'Cross-sells', 'woocommerce' ), 'product_url' => __( 'External URL', 'woocommerce' ), @@ -537,6 +539,7 @@ class WC_Product_CSV_Importer_Controller { 'shipping_class_id' => __( 'Shipping Class', 'woocommerce' ), 'image_id' => __( 'Images', 'woocommerce' ), 'parent_id' => __( 'Parent', 'woocommerce' ), + 'children' => __( 'Children', 'woocommerce' ), 'upsell_ids' => __( 'Upsells', 'woocommerce' ), 'cross_sell_ids' => __( 'Cross-sells', 'woocommerce' ), 'external' => array( diff --git a/includes/export/class-wc-product-csv-exporter.php b/includes/export/class-wc-product-csv-exporter.php index ae9405932fb..f025fdfe65c 100644 --- a/includes/export/class-wc-product-csv-exporter.php +++ b/includes/export/class-wc-product-csv-exporter.php @@ -108,6 +108,7 @@ class WC_Product_CSV_Exporter extends WC_CSV_Batch_Exporter { 'download_limit' => __( 'Download Limit', 'woocommerce' ), 'download_expiry' => __( 'Download Expiry Days', 'woocommerce' ), 'parent_id' => __( 'Parent', 'woocommerce' ), + 'children' => __( 'Children', 'woocommerce' ), 'upsell_ids' => __( 'Upsells', 'woocommerce' ), 'cross_sell_ids' => __( 'Cross-sells', 'woocommerce' ), 'product_url' => __( 'External URL', 'woocommerce' ), @@ -293,16 +294,40 @@ class WC_Product_CSV_Exporter extends WC_CSV_Batch_Exporter { protected function get_column_value_parent_id( $product ) { if ( $product->get_parent_id( 'edit' ) ) { $parent = wc_get_product( $product->get_parent_id( 'edit' ) ); - - if ( $parent && $parent->get_sku() ) { - return $parent->get_sku(); - } else { - return 'id:' . $parent->get_id(); + if ( ! $parent ) { + return ''; } + + return $parent->get_sku( 'edit' ) ? $parent->get_sku( 'edit' ) : 'id:' . $parent->get_id(); } return ''; } + /** + * Get children value. + * + * @since 3.1.0 + * @param WC_Product $product + * @return string + */ + protected function get_column_value_children( $product ) { + if ( 'grouped' !== $product->get_type() ) { + return ''; + } + + $value = array(); + $child_ids = $product->get_children( 'edit' ); + foreach ( $child_ids as $child_id ) { + $child = wc_get_product( $child_id ); + if ( ! $child ) { + continue; + } + + $value[] = $child->get_sku( 'edit' ) ? $child->get_sku( 'edit' ) : 'id:' . $child_id; + } + return implode( ',', $value ); + } + /** * Get download_limit value. * diff --git a/includes/import/class-wc-product-csv-importer.php b/includes/import/class-wc-product-csv-importer.php index 6579d75f817..9815c537c78 100644 --- a/includes/import/class-wc-product-csv-importer.php +++ b/includes/import/class-wc-product-csv-importer.php @@ -343,6 +343,7 @@ class WC_Product_CSV_Importer extends WC_Product_Importer { 'shipping_class_id' => array( $this, 'parse_shipping_class_field' ), 'images' => array( $this, 'parse_images_field' ), 'parent_id' => array( $this, 'parse_relative_field' ), + 'children' => array( $this, 'parse_relative_comma_field' ), 'upsell_ids' => array( $this, 'parse_relative_comma_field' ), 'cross_sell_ids' => array( $this, 'parse_relative_comma_field' ), 'download_limit' => 'absint',