Product Import Export for WooCommerce - Version 1.3.0

Version Description

  • Woocommerce 3.0 Compatibility.
Download this release

Release Info

Developer hikeforce
Plugin Icon 128x128 Product Import Export for WooCommerce
Version 1.3.0
Comparing to
See all releases

Code changes from version 1.2.4 to 1.3.0

includes/importer/class-wf-csv-parser.php CHANGED
@@ -188,12 +188,13 @@ class WF_CSV_Parser {
188
 
189
  $product['merging'] = true;
190
 
191
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> Row %s - preparing for merge.', 'wf_csv_import_export'), $this->row ) );
192
-
 
193
  // Required fields
194
  if ( ! $post_id && empty( $item['sku'] ) ) {
195
 
196
- $WF_CSV_Product_Import->log->add( 'csv-import', __( '> > Cannot merge without id or sku. Importing instead.', 'wf_csv_import_export') );
197
 
198
  $merging = false;
199
  } else {
@@ -211,14 +212,14 @@ class WF_CSV_Parser {
211
  ", $item['sku']);
212
  $found_product_id = $wpdb->get_var($db_query);
213
  if ( ! $found_product_id ) {
214
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf(__( '> > Skipped. Cannot find product with sku %s. Importing instead.', 'wf_csv_import_export'), $item['sku']) );
215
  $merging = false;
216
 
217
  } else {
218
 
219
  $post_id = $found_product_id;
220
 
221
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf(__( '> > Found product with ID %s.', 'wf_csv_import_export'), $post_id) );
222
 
223
  }
224
  }
@@ -229,15 +230,15 @@ class WF_CSV_Parser {
229
  if ( ! $merging ) {
230
 
231
  $product['merging'] = false;
232
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> Row %s - preparing for import.', 'wf_csv_import_export'), $this->row ) );
233
 
234
  // Required fields
235
  if ( $item['post_parent']=== '' && $item['post_title']=== '') {
236
- $WF_CSV_Product_Import->log->add( 'csv-import', __( '> > Skipped. No post_title set for new product.', 'wf_csv_import_export') );
237
  return new WP_Error( 'parse-error', __( 'No post_title set for new product.', 'wf_csv_import_export' ) );
238
  }
239
  if ( $item['post_parent']!== '' && $item['post_parent']!== null && $item['parent_sku'] === '' ) {
240
- $WF_CSV_Product_Import->log->add( 'csv-import', __( '> > Skipped. No parent set for new variation product.', 'wf_csv_import_export') );
241
  //return new WP_Error( 'parse-error', __( 'No post_title set for new product.', 'wf_csv_import_export' ) );
242
  return new WP_Error( 'parse-error', __( 'No parent set for new variation product.', 'wf_csv_import_export' ) );
243
  }
@@ -430,7 +431,7 @@ class WF_CSV_Parser {
430
 
431
  // Exists?
432
  if ( ! taxonomy_exists( $taxonomy ) ) {
433
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> > Skipping taxonomy "%s" - it does not exist.', 'wf_csv_import_export'), $taxonomy ) );
434
  continue;
435
  }
436
 
@@ -439,7 +440,7 @@ class WF_CSV_Parser {
439
  $term = strtolower( $value );
440
 
441
  if ( ! array_key_exists( $term, $this->allowed_product_types ) ) {
442
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> > > Product type "%s" not allowed - using simple.', 'wf_csv_import_export'), $term ) );
443
  $term_id = $this->allowed_product_types['simple'];
444
  } else {
445
  $term_id = $this->allowed_product_types[ $term ];
@@ -466,6 +467,8 @@ class WF_CSV_Parser {
466
 
467
  $raw_term = explode( '>', $raw_term );
468
  $raw_term = array_map( 'trim', $raw_term );
 
 
469
  $raw_term = array_map( 'wp_specialchars', $raw_term );
470
  $raw_term = array_filter( $raw_term );
471
 
@@ -485,7 +488,7 @@ class WF_CSV_Parser {
485
  */
486
  $term_may_exist = term_exists( $term, $taxonomy, absint( $parent ) );
487
 
488
- $WF_CSV_Product_Import->log->add( 'CSV-Import', sprintf( __( '> > (' . __LINE__ . ') Term %s (%s) exists? %s', 'wf_csv_import_export' ), sanitize_text_field( $term ), esc_html( $taxonomy ), $term_may_exist ? print_r( $term_may_exist, true ) : '-' ) );
489
 
490
  if ( is_array( $term_may_exist ) ) {
491
  $possible_term = get_term( $term_may_exist['term_id'], 'product_cat' );
@@ -510,7 +513,7 @@ class WF_CSV_Parser {
510
  if ( ! is_wp_error( $t ) ) {
511
  $term_id = $t['term_id'];
512
  } else {
513
- $WF_CSV_Product_Import->log->add( 'CSV-Import', sprintf( __( '> > (' . __LINE__ . ') Failed to import term %s, parent %s - %s', 'wf_csv_import_export' ), sanitize_text_field( $term ), sanitize_text_field( $parent ), sanitize_text_field( $taxonomy ) ) );
514
  break;
515
  }
516
  }
@@ -532,7 +535,7 @@ class WF_CSV_Parser {
532
  } else {
533
 
534
  $term_id = '';
535
- $raw_term = wp_specialchars( $raw_term );
536
 
537
  if ( isset( $this->inserted_terms[$taxonomy][0][$raw_term] ) ) {
538
 
@@ -550,7 +553,7 @@ class WF_CSV_Parser {
550
  if ( ! is_wp_error( $t ) ) {
551
  $term_id = $t['term_id'];
552
  } else {
553
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __( '> > Failed to import term %s %s', 'wf_csv_import_export' ), esc_html($raw_term), esc_html($taxonomy) ) );
554
  break;
555
  }
556
  }
@@ -599,7 +602,7 @@ class WF_CSV_Parser {
599
 
600
  $nicename = strtolower( sanitize_title( str_replace( 'pa_', '', $taxonomy ) ) );
601
 
602
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> > Attribute taxonomy "%s" does not exist. Adding it. Nicename: %s', 'wf_csv_import_export'), $taxonomy, $nicename ) );
603
 
604
  $exists_in_db = $wpdb->get_var( "SELECT attribute_id FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name = '" . $nicename . "';" );
605
 
@@ -607,7 +610,7 @@ class WF_CSV_Parser {
607
  // Create the taxonomy
608
  $wpdb->insert( $wpdb->prefix . "woocommerce_attribute_taxonomies", array( 'attribute_name' => $nicename, 'attribute_label' => $nicename, 'attribute_type' => 'select', 'attribute_orderby' => 'menu_order' ) );
609
  } else {
610
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __('> > Attribute taxonomy %s already exists in DB.', 'wf_csv_import_export'), $taxonomy ) );
611
  }
612
 
613
  // Register the taxonomy now so that the import works!
@@ -646,13 +649,13 @@ class WF_CSV_Parser {
646
  if ( ! is_wp_error( $t ) ) {
647
  $term_id = $t['term_id'];
648
 
649
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __( '> > Inserted Raw Term %s ID = %s', 'wf_csv_import_export' ), esc_html( $raw_term ), $term_id ) );
650
  } else {
651
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __( '> > Failed to import term %s %s', 'wf_csv_import_export' ), esc_html($raw_term), esc_html($taxonomy) ) );
652
  break;
653
  }
654
  } else {
655
- $WF_CSV_Product_Import->log->add( 'csv-import', sprintf( __( '> > Raw Term %s ID = %s', 'wf_csv_import_export' ), esc_html( $raw_term ), $term_id ) );
656
  }
657
 
658
  if ( $term_id ) {
188
 
189
  $product['merging'] = true;
190
 
191
+
192
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> Row %s - preparing for merge.', 'wf_csv_import_export'), $this->row ) );
193
+
194
  // Required fields
195
  if ( ! $post_id && empty( $item['sku'] ) ) {
196
 
197
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', __( '> > Cannot merge without id or sku. Importing instead.', 'wf_csv_import_export') );
198
 
199
  $merging = false;
200
  } else {
212
  ", $item['sku']);
213
  $found_product_id = $wpdb->get_var($db_query);
214
  if ( ! $found_product_id ) {
215
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf(__( '> > Skipped. Cannot find product with sku %s. Importing instead.', 'wf_csv_import_export'), $item['sku']) );
216
  $merging = false;
217
 
218
  } else {
219
 
220
  $post_id = $found_product_id;
221
 
222
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf(__( '> > Found product with ID %s.', 'wf_csv_import_export'), $post_id) );
223
 
224
  }
225
  }
230
  if ( ! $merging ) {
231
 
232
  $product['merging'] = false;
233
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> Row %s - preparing for import.', 'wf_csv_import_export'), $this->row ) );
234
 
235
  // Required fields
236
  if ( $item['post_parent']=== '' && $item['post_title']=== '') {
237
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', __( '> > Skipped. No post_title set for new product.', 'wf_csv_import_export') );
238
  return new WP_Error( 'parse-error', __( 'No post_title set for new product.', 'wf_csv_import_export' ) );
239
  }
240
  if ( $item['post_parent']!== '' && $item['post_parent']!== null && $item['parent_sku'] === '' ) {
241
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', __( '> > Skipped. No parent set for new variation product.', 'wf_csv_import_export') );
242
  //return new WP_Error( 'parse-error', __( 'No post_title set for new product.', 'wf_csv_import_export' ) );
243
  return new WP_Error( 'parse-error', __( 'No parent set for new variation product.', 'wf_csv_import_export' ) );
244
  }
431
 
432
  // Exists?
433
  if ( ! taxonomy_exists( $taxonomy ) ) {
434
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> > Skipping taxonomy "%s" - it does not exist.', 'wf_csv_import_export'), $taxonomy ) );
435
  continue;
436
  }
437
 
440
  $term = strtolower( $value );
441
 
442
  if ( ! array_key_exists( $term, $this->allowed_product_types ) ) {
443
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> > > Product type "%s" not allowed - using simple.', 'wf_csv_import_export'), $term ) );
444
  $term_id = $this->allowed_product_types['simple'];
445
  } else {
446
  $term_id = $this->allowed_product_types[ $term ];
467
 
468
  $raw_term = explode( '>', $raw_term );
469
  $raw_term = array_map( 'trim', $raw_term );
470
+
471
+
472
  $raw_term = array_map( 'wp_specialchars', $raw_term );
473
  $raw_term = array_filter( $raw_term );
474
 
488
  */
489
  $term_may_exist = term_exists( $term, $taxonomy, absint( $parent ) );
490
 
491
+ $WF_CSV_Product_Import->hf_log_data_change( 'CSV-Import', sprintf( __( '> > (' . __LINE__ . ') Term %s (%s) exists? %s', 'wf_csv_import_export' ), sanitize_text_field( $term ), esc_html( $taxonomy ), $term_may_exist ? print_r( $term_may_exist, true ) : '-' ) );
492
 
493
  if ( is_array( $term_may_exist ) ) {
494
  $possible_term = get_term( $term_may_exist['term_id'], 'product_cat' );
513
  if ( ! is_wp_error( $t ) ) {
514
  $term_id = $t['term_id'];
515
  } else {
516
+ $WF_CSV_Product_Import->hf_log_data_change( 'CSV-Import', sprintf( __( '> > (' . __LINE__ . ') Failed to import term %s, parent %s - %s', 'wf_csv_import_export' ), sanitize_text_field( $term ), sanitize_text_field( $parent ), sanitize_text_field( $taxonomy ) ) );
517
  break;
518
  }
519
  }
535
  } else {
536
 
537
  $term_id = '';
538
+ $raw_term = (WC()->version < '2.7.0') ? wp_specialchars( $raw_term ) : esc_html( $raw_term );
539
 
540
  if ( isset( $this->inserted_terms[$taxonomy][0][$raw_term] ) ) {
541
 
553
  if ( ! is_wp_error( $t ) ) {
554
  $term_id = $t['term_id'];
555
  } else {
556
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __( '> > Failed to import term %s %s', 'wf_csv_import_export' ), esc_html($raw_term), esc_html($taxonomy) ) );
557
  break;
558
  }
559
  }
602
 
603
  $nicename = strtolower( sanitize_title( str_replace( 'pa_', '', $taxonomy ) ) );
604
 
605
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> > Attribute taxonomy "%s" does not exist. Adding it. Nicename: %s', 'wf_csv_import_export'), $taxonomy, $nicename ) );
606
 
607
  $exists_in_db = $wpdb->get_var( "SELECT attribute_id FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name = '" . $nicename . "';" );
608
 
610
  // Create the taxonomy
611
  $wpdb->insert( $wpdb->prefix . "woocommerce_attribute_taxonomies", array( 'attribute_name' => $nicename, 'attribute_label' => $nicename, 'attribute_type' => 'select', 'attribute_orderby' => 'menu_order' ) );
612
  } else {
613
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __('> > Attribute taxonomy %s already exists in DB.', 'wf_csv_import_export'), $taxonomy ) );
614
  }
615
 
616
  // Register the taxonomy now so that the import works!
649
  if ( ! is_wp_error( $t ) ) {
650
  $term_id = $t['term_id'];
651
 
652
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __( '> > Inserted Raw Term %s ID = %s', 'wf_csv_import_export' ), esc_html( $raw_term ), $term_id ) );
653
  } else {
654
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __( '> > Failed to import term %s %s', 'wf_csv_import_export' ), esc_html($raw_term), esc_html($taxonomy) ) );
655
  break;
656
  }
657
  } else {
658
+ $WF_CSV_Product_Import->hf_log_data_change( 'csv-import', sprintf( __( '> > Raw Term %s ID = %s', 'wf_csv_import_export' ), esc_html( $raw_term ), $term_id ) );
659
  }
660
 
661
  if ( $term_id ) {
includes/importer/class-wf-prodimpexpcsv-product-import.php CHANGED
@@ -31,7 +31,15 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
31
  */
32
  public function __construct() {
33
 
34
- $this->log = new WC_Logger();
 
 
 
 
 
 
 
 
35
  $this->import_page = 'woocommerce_csv';
36
  $this->file_url_import_enabled = apply_filters( 'woocommerce_csv_product_file_url_import_enabled', true );
37
  }
@@ -542,8 +550,8 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
542
 
543
  wp_suspend_cache_invalidation( true );
544
 
545
- $this->log->add( 'csv-import', '---' );
546
- $this->log->add( 'csv-import', __( 'Processing products.', 'wf_csv_import_export' ) );
547
  foreach ( $this->parsed_data as $key => &$item ) {
548
 
549
  $product = $this->parser->parse_product( $item, $this->merge_empty_cells );
@@ -555,7 +563,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
555
  unset( $item, $product );
556
  $i++;
557
  }
558
- $this->log->add( 'csv-import', __( 'Finished processing products.', 'wf_csv_import_export' ) );
559
  wp_suspend_cache_invalidation( false );
560
  }
561
 
@@ -564,19 +572,37 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
564
  *
565
  * @param string $file Path to the CSV file for importing
566
  */
 
 
 
 
 
 
 
 
 
 
 
 
567
  public function import_start( $file, $mapping, $start_pos, $end_pos, $eval_field ) {
568
 
 
569
  $memory = size_format( woocommerce_let_to_num( ini_get( 'memory_limit' ) ) );
570
  $wp_memory = size_format( woocommerce_let_to_num( WP_MEMORY_LIMIT ) );
571
-
572
- $this->log->add( 'csv-import', '---[ New Import ] PHP Memory: ' . $memory . ', WP Memory: ' . $wp_memory );
573
- $this->log->add( 'csv-import', __( 'Parsing products CSV.', 'wf_csv_import_export' ) );
 
 
 
 
 
574
 
575
  $this->parser = new WF_CSV_Parser( 'product' );
576
 
577
  list( $this->parsed_data, $this->raw_headers, $position ) = $this->parser->parse_data( $file, $this->delimiter, $mapping, $start_pos, $end_pos, $eval_field );
578
 
579
- $this->log->add( 'csv-import', __( 'Finished parsing products CSV.', 'wf_csv_import_export' ) );
580
 
581
  unset( $import_data );
582
 
@@ -726,14 +752,14 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
726
 
727
  if ( ! empty( $processing_product_id ) && isset( $this->processed_posts[ $processing_product_id ] ) ) {
728
  $this->add_import_result( 'skipped', __( 'Product already processed', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
729
- $this->log->add( 'csv-import', __('> Post ID already processed. Skipping.', 'wf_csv_import_export'), true );
730
  unset( $post );
731
  return;
732
  }
733
 
734
  if ( ! empty ( $post['post_status'] ) && $post['post_status'] == 'auto-draft' ) {
735
  $this->add_import_result( 'skipped', __( 'Skipping auto-draft', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
736
- $this->log->add( 'csv-import', __('> Skipping auto-draft.', 'wf_csv_import_export'), true );
737
  unset( $post );
738
  return;
739
  }
@@ -747,14 +773,14 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
747
  $usr_msg = 'Product already exists.';
748
  }
749
  $this->add_import_result( 'skipped', __( $usr_msg, 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
750
- $this->log->add( 'csv-import', sprintf( __('> &#8220;%s&#8221;'.$usr_msg, 'wf_csv_import_export'), esc_html($processing_product_title) ), true );
751
  unset( $post );
752
  return;
753
  }
754
 
755
  if ( $processing_product_id && is_string( get_post_status( $processing_product_id ) ) ) {
756
  $this->add_import_result( 'skipped', __( 'Importing post ID conflicts with an existing post ID', 'wf_csv_import_export' ), $processing_product_id, get_the_title( $processing_product_id ), '' );
757
- $this->log->add( 'csv-import', sprintf( __('> &#8220;%s&#8221; ID already exists.', 'wf_csv_import_export'), esc_html( $processing_product_id ) ), true );
758
  unset( $post );
759
  return;
760
  }
@@ -763,7 +789,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
763
  $is_post_exist_in_db = get_post_type( $processing_product_id );
764
  if ( $merging && $processing_product_id && !empty($is_post_exist_in_db) && (get_post_type( $processing_product_id ) !== $post['post_type'] )) {
765
  $this->add_import_result( 'skipped', __( 'Post is not a product', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
766
- $this->log->add( 'csv-import', sprintf( __('> &#8220;%s&#8221; is not a product.', 'wf_csv_import_export'), esc_html($processing_product_id) ), true );
767
  unset( $post );
768
  return;
769
  }
@@ -773,7 +799,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
773
  // Only merge fields which are set
774
  $post_id = $processing_product_id;
775
 
776
- $this->log->add( 'csv-import', sprintf( __('> Merging post ID %s.', 'wf_csv_import_export'), $post_id ), true );
777
 
778
  $postdata = array(
779
  'ID' => $post_id
@@ -837,11 +863,11 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
837
 
838
  if ( ! $result ) {
839
  $this->add_import_result( 'failed', __( 'Failed to update product', 'wf_csv_import_export' ), $post_id, $processing_product_title, $processing_product_sku );
840
- $this->log->add( 'csv-import', sprintf( __('> Failed to update product %s', 'wf_csv_import_export'), $post_id ), true );
841
  unset( $post );
842
  return;
843
  } else {
844
- $this->log->add( 'csv-import', __( '> Merged post data: ', 'wf_csv_import_export' ) . print_r( $postdata, true ) );
845
  }
846
  }
847
 
@@ -870,7 +896,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
870
  }
871
 
872
  // Insert product
873
- $this->log->add( 'csv-import', sprintf( __('> Inserting %s', 'wf_csv_import_export'), esc_html( $processing_product_title ) ), true );
874
 
875
  $postdata = array(
876
  'import_id' => $processing_product_id,
@@ -893,13 +919,13 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
893
  if ( is_wp_error( $post_id ) ) {
894
 
895
  $this->add_import_result( 'failed', __( 'Failed to import product', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
896
- $this->log->add( 'csv-import', sprintf( __( 'Failed to import product &#8220;%s&#8221;', 'wf_csv_import_export' ), esc_html($processing_product_title) ) );
897
  unset( $post );
898
  return;
899
 
900
  } else {
901
 
902
- $this->log->add( 'csv-import', sprintf( __('> Inserted - post ID is %s.', 'wf_csv_import_export'), $post_id ) );
903
 
904
  }
905
  }
@@ -997,7 +1023,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
997
  if ( $image == $attachment_url || basename( $image ) == $attachment_basename ) {
998
  unset( $post['images'][ $key ] );
999
 
1000
- $this->log->add( 'csv-import', sprintf( __( '> > Image exists - skipping %s', 'wf_csv_import_export' ), basename( $image ) ) );
1001
 
1002
  if ( $key == 0 ) {
1003
  update_post_meta( $post_id, '_thumbnail_id', $attachment );
@@ -1027,7 +1053,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
1027
 
1028
  if ( $post['images'] ) foreach ( $post['images'] as $image_key => $image ) {
1029
 
1030
- $this->log->add( 'csv-import', sprintf( __( '> > Importing image "%s"', 'wf_csv_import_export' ), $image ) );
1031
 
1032
  $filename = basename( $image );
1033
 
@@ -1042,7 +1068,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
1042
 
1043
  if ( ! is_wp_error( $attachment_id ) && $attachment_id ) {
1044
 
1045
- $this->log->add( 'csv-import', sprintf( __( '> > Imported image "%s"', 'wf_csv_import_export' ), $image ) );
1046
 
1047
  // Set alt
1048
  update_post_meta( $attachment_id, '_wp_attachment_image_alt', $processing_product_title );
@@ -1057,14 +1083,14 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
1057
 
1058
  $featured = false;
1059
  } else {
1060
- $this->log->add( 'csv-import', sprintf( __( '> > Error importing image "%s"', 'wf_csv_import_export' ), $image ) );
1061
- $this->log->add( 'csv-import', '> > ' . $attachment_id->get_error_message() );
1062
  }
1063
 
1064
  unset( $attachment, $attachment_id );
1065
  }
1066
 
1067
- $this->log->add( 'csv-import', __( '> > Images set', 'wf_csv_import_export' ) );
1068
 
1069
  ksort( $gallery_ids );
1070
 
@@ -1117,10 +1143,10 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
1117
 
1118
  if ( $merging ) {
1119
  $this->add_import_result( 'merged', 'Merge successful', $post_id, $processing_product_title, $processing_product_sku );
1120
- $this->log->add( 'csv-import', sprintf( __('> Finished merging post ID %s.', 'wf_csv_import_export'), $post_id ) );
1121
  } else {
1122
  $this->add_import_result( 'imported', 'Import successful', $post_id, $processing_product_title, $processing_product_sku );
1123
- $this->log->add( 'csv-import', sprintf( __('> Finished importing post ID %s.', 'wf_csv_import_export'), $post_id ) );
1124
  }
1125
 
1126
  unset( $post );
@@ -1223,7 +1249,7 @@ class WF_ProdImpExpCsv_Product_Import extends WP_Importer {
1223
  }
1224
 
1225
  if ( ! is_wp_error( $attachment_id ) && $attachment_id > 0 ) {
1226
- $this->log->add( 'csv-import', sprintf( __( '> > Inserted image attachment "%s"', 'wf_csv_import_export' ), $url ) );
1227
 
1228
  $this->attachments[] = $attachment_id;
1229
  }
31
  */
32
  public function __construct() {
33
 
34
+ if(WC()->version < '2.7.0'){
35
+ $this->log = new WC_Logger();
36
+
37
+ }else
38
+ {
39
+ $this->log = wc_get_logger();
40
+
41
+ }
42
+
43
  $this->import_page = 'woocommerce_csv';
44
  $this->file_url_import_enabled = apply_filters( 'woocommerce_csv_product_file_url_import_enabled', true );
45
  }
550
 
551
  wp_suspend_cache_invalidation( true );
552
 
553
+ $this->hf_log_data_change( 'csv-import', '---' );
554
+ $this->hf_log_data_change( 'csv-import', __( 'Processing products.', 'wf_csv_import_export' ) );
555
  foreach ( $this->parsed_data as $key => &$item ) {
556
 
557
  $product = $this->parser->parse_product( $item, $this->merge_empty_cells );
563
  unset( $item, $product );
564
  $i++;
565
  }
566
+ $this->hf_log_data_change( 'csv-import', __( 'Finished processing products.', 'wf_csv_import_export' ) );
567
  wp_suspend_cache_invalidation( false );
568
  }
569
 
572
  *
573
  * @param string $file Path to the CSV file for importing
574
  */
575
+
576
+ public function hf_log_data_change ($content = 'csv-import',$data='')
577
+ {
578
+ if (WC()->version < '2.7.0')
579
+ {
580
+ $this->log->add($content,$data);
581
+ }else
582
+ {
583
+ $context = array( 'source' => $content );
584
+ $this->log->log("debug", $data ,$context);
585
+ }
586
+ }
587
  public function import_start( $file, $mapping, $start_pos, $end_pos, $eval_field ) {
588
 
589
+ if(WC()->version < '2.7.0'){
590
  $memory = size_format( woocommerce_let_to_num( ini_get( 'memory_limit' ) ) );
591
  $wp_memory = size_format( woocommerce_let_to_num( WP_MEMORY_LIMIT ) );
592
+ }else
593
+ {
594
+ $memory = size_format( wc_let_to_num( ini_get( 'memory_limit' ) ) );
595
+ $wp_memory = size_format( wc_let_to_num( WP_MEMORY_LIMIT ) );
596
+
597
+ }
598
+ $this->hf_log_data_change( 'csv-import', '---[ New Import ] PHP Memory: ' . $memory . ', WP Memory: ' . $wp_memory );
599
+ $this->hf_log_data_change( 'csv-import', __( 'Parsing products CSV.', 'wf_csv_import_export' ) );
600
 
601
  $this->parser = new WF_CSV_Parser( 'product' );
602
 
603
  list( $this->parsed_data, $this->raw_headers, $position ) = $this->parser->parse_data( $file, $this->delimiter, $mapping, $start_pos, $end_pos, $eval_field );
604
 
605
+ $this->hf_log_data_change( 'csv-import', __( 'Finished parsing products CSV.', 'wf_csv_import_export' ) );
606
 
607
  unset( $import_data );
608
 
752
 
753
  if ( ! empty( $processing_product_id ) && isset( $this->processed_posts[ $processing_product_id ] ) ) {
754
  $this->add_import_result( 'skipped', __( 'Product already processed', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
755
+ $this->hf_log_data_change( 'csv-import', __('> Post ID already processed. Skipping.', 'wf_csv_import_export'), true );
756
  unset( $post );
757
  return;
758
  }
759
 
760
  if ( ! empty ( $post['post_status'] ) && $post['post_status'] == 'auto-draft' ) {
761
  $this->add_import_result( 'skipped', __( 'Skipping auto-draft', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
762
+ $this->hf_log_data_change( 'csv-import', __('> Skipping auto-draft.', 'wf_csv_import_export'), true );
763
  unset( $post );
764
  return;
765
  }
773
  $usr_msg = 'Product already exists.';
774
  }
775
  $this->add_import_result( 'skipped', __( $usr_msg, 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
776
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> &#8220;%s&#8221;'.$usr_msg, 'wf_csv_import_export'), esc_html($processing_product_title) ), true );
777
  unset( $post );
778
  return;
779
  }
780
 
781
  if ( $processing_product_id && is_string( get_post_status( $processing_product_id ) ) ) {
782
  $this->add_import_result( 'skipped', __( 'Importing post ID conflicts with an existing post ID', 'wf_csv_import_export' ), $processing_product_id, get_the_title( $processing_product_id ), '' );
783
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> &#8220;%s&#8221; ID already exists.', 'wf_csv_import_export'), esc_html( $processing_product_id ) ), true );
784
  unset( $post );
785
  return;
786
  }
789
  $is_post_exist_in_db = get_post_type( $processing_product_id );
790
  if ( $merging && $processing_product_id && !empty($is_post_exist_in_db) && (get_post_type( $processing_product_id ) !== $post['post_type'] )) {
791
  $this->add_import_result( 'skipped', __( 'Post is not a product', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
792
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> &#8220;%s&#8221; is not a product.', 'wf_csv_import_export'), esc_html($processing_product_id) ), true );
793
  unset( $post );
794
  return;
795
  }
799
  // Only merge fields which are set
800
  $post_id = $processing_product_id;
801
 
802
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Merging post ID %s.', 'wf_csv_import_export'), $post_id ), true );
803
 
804
  $postdata = array(
805
  'ID' => $post_id
863
 
864
  if ( ! $result ) {
865
  $this->add_import_result( 'failed', __( 'Failed to update product', 'wf_csv_import_export' ), $post_id, $processing_product_title, $processing_product_sku );
866
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Failed to update product %s', 'wf_csv_import_export'), $post_id ), true );
867
  unset( $post );
868
  return;
869
  } else {
870
+ $this->hf_log_data_change( 'csv-import', __( '> Merged post data: ', 'wf_csv_import_export' ) . print_r( $postdata, true ) );
871
  }
872
  }
873
 
896
  }
897
 
898
  // Insert product
899
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Inserting %s', 'wf_csv_import_export'), esc_html( $processing_product_title ) ), true );
900
 
901
  $postdata = array(
902
  'import_id' => $processing_product_id,
919
  if ( is_wp_error( $post_id ) ) {
920
 
921
  $this->add_import_result( 'failed', __( 'Failed to import product', 'wf_csv_import_export' ), $processing_product_id, $processing_product_title, $processing_product_sku );
922
+ $this->hf_log_data_change( 'csv-import', sprintf( __( 'Failed to import product &#8220;%s&#8221;', 'wf_csv_import_export' ), esc_html($processing_product_title) ) );
923
  unset( $post );
924
  return;
925
 
926
  } else {
927
 
928
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Inserted - post ID is %s.', 'wf_csv_import_export'), $post_id ) );
929
 
930
  }
931
  }
1023
  if ( $image == $attachment_url || basename( $image ) == $attachment_basename ) {
1024
  unset( $post['images'][ $key ] );
1025
 
1026
+ $this->hf_log_data_change( 'csv-import', sprintf( __( '> > Image exists - skipping %s', 'wf_csv_import_export' ), basename( $image ) ) );
1027
 
1028
  if ( $key == 0 ) {
1029
  update_post_meta( $post_id, '_thumbnail_id', $attachment );
1053
 
1054
  if ( $post['images'] ) foreach ( $post['images'] as $image_key => $image ) {
1055
 
1056
+ $this->hf_log_data_change( 'csv-import', sprintf( __( '> > Importing image "%s"', 'wf_csv_import_export' ), $image ) );
1057
 
1058
  $filename = basename( $image );
1059
 
1068
 
1069
  if ( ! is_wp_error( $attachment_id ) && $attachment_id ) {
1070
 
1071
+ $this->hf_log_data_change( 'csv-import', sprintf( __( '> > Imported image "%s"', 'wf_csv_import_export' ), $image ) );
1072
 
1073
  // Set alt
1074
  update_post_meta( $attachment_id, '_wp_attachment_image_alt', $processing_product_title );
1083
 
1084
  $featured = false;
1085
  } else {
1086
+ $this->hf_log_data_change( 'csv-import', sprintf( __( '> > Error importing image "%s"', 'wf_csv_import_export' ), $image ) );
1087
+ $this->hf_log_data_change( 'csv-import', '> > ' . $attachment_id->get_error_message() );
1088
  }
1089
 
1090
  unset( $attachment, $attachment_id );
1091
  }
1092
 
1093
+ $this->hf_log_data_change( 'csv-import', __( '> > Images set', 'wf_csv_import_export' ) );
1094
 
1095
  ksort( $gallery_ids );
1096
 
1143
 
1144
  if ( $merging ) {
1145
  $this->add_import_result( 'merged', 'Merge successful', $post_id, $processing_product_title, $processing_product_sku );
1146
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Finished merging post ID %s.', 'wf_csv_import_export'), $post_id ) );
1147
  } else {
1148
  $this->add_import_result( 'imported', 'Import successful', $post_id, $processing_product_title, $processing_product_sku );
1149
+ $this->hf_log_data_change( 'csv-import', sprintf( __('> Finished importing post ID %s.', 'wf_csv_import_export'), $post_id ) );
1150
  }
1151
 
1152
  unset( $post );
1249
  }
1250
 
1251
  if ( ! is_wp_error( $attachment_id ) && $attachment_id > 0 ) {
1252
+ $this->hf_log_data_change( 'csv-import', sprintf( __( '> > Inserted image attachment "%s"', 'wf_csv_import_export' ), $url ) );
1253
 
1254
  $this->attachments[] = $attachment_id;
1255
  }
product-csv-import-export.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://www.xadapter.com/product/product-import-export-plugin-for-woo
5
  Description: Import and Export Products From and To your WooCommerce Store.
6
  Author: HikeForce
7
  Author URI: http://www.xadapter.com/vendor/hikeforce/
8
- Version: 1.2.4
9
  Text Domain: wf_csv_import_export
10
  */
11
 
5
  Description: Import and Export Products From and To your WooCommerce Store.
6
  Author: HikeForce
7
  Author URI: http://www.xadapter.com/vendor/hikeforce/
8
+ Version: 1.3.0
9
  Text Domain: wf_csv_import_export
10
  */
11
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link:
4
  Tags: woocommerce import products, woocommerce export products, woocommerce export import products, export woocommerce products with images, woocommerce csv import variable products, woocommerce import products with attributes
5
  Requires at least: 3.0.1
6
  Tested up to: 4.7
7
- Stable tag: 1.2.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -81,6 +81,8 @@ Yes. You can import or export product images along with other details
81
  3. Premium Export Settings Screen
82
 
83
  == Changelog ==
 
 
84
  = 1.2.4 =
85
  * Marketing Content Changed.
86
  = 1.2.3 =
@@ -137,6 +139,8 @@ Yes. You can import or export product images along with other details
137
  * Import /Export Woocommerce Products.
138
 
139
  == Upgrade Notice ==
 
 
140
  = 1.2.4 =
141
  * Marketing Content Changed.
142
  = 1.2.3 =
4
  Tags: woocommerce import products, woocommerce export products, woocommerce export import products, export woocommerce products with images, woocommerce csv import variable products, woocommerce import products with attributes
5
  Requires at least: 3.0.1
6
  Tested up to: 4.7
7
+ Stable tag: 1.3.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
81
  3. Premium Export Settings Screen
82
 
83
  == Changelog ==
84
+ = 1.3.0 =
85
+ * Woocommerce 3.0 Compatibility.
86
  = 1.2.4 =
87
  * Marketing Content Changed.
88
  = 1.2.3 =
139
  * Import /Export Woocommerce Products.
140
 
141
  == Upgrade Notice ==
142
+ = 1.3.0 =
143
+ * Woocommerce 3.0 Compatibility.
144
  = 1.2.4 =
145
  * Marketing Content Changed.
146
  = 1.2.3 =