Order Export & Order Import for WooCommerce - Version 2.1.7

Version Description

  • Enhancement: Auto-suggestion of coupon codes making coupon-based filtering easier.
Download this release

Release Info

Developer webtoffee
Plugin Icon 128x128 Order Export & Order Import for WooCommerce
Version 2.1.7
Comparing to
See all releases

Code changes from version 2.1.6 to 2.1.7

admin/class-wt-import-export-for-woo-admin.php CHANGED
@@ -430,5 +430,44 @@ class Wt_Import_Export_For_Woo_Admin_Basic {
430
  $links[] = '<a href="https://www.webtoffee.com/support/" target="_blank">'.__('Support').'</a>';
431
  return $links;
432
  }
433
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
  }
430
  $links[] = '<a href="https://www.webtoffee.com/support/" target="_blank">'.__('Support').'</a>';
431
  return $links;
432
  }
433
+
434
+
435
+ /**
436
+ * Search for coupons and return json.
437
+ */
438
+ public static function ajax_coupon_search() {
439
+
440
+ if (Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC)) {
441
+
442
+ if (!current_user_can('export')) {
443
+ wp_die(-1);
444
+ }
445
+
446
+ $term = isset($_POST['term']) ? (string) sanitize_text_field(wp_unslash($_POST['term'])) : '';
447
+
448
+ if (empty($term)) {
449
+ wp_die();
450
+ }
451
+
452
+
453
+ global $wpdb;
454
+
455
+ $like = $wpdb->esc_like($term);
456
+ $query = "
457
+ SELECT post.post_title as id, post.post_title as text
458
+ FROM " . $wpdb->posts . " as post
459
+ WHERE post.post_title LIKE %s
460
+ AND post.post_type = 'shop_coupon'
461
+ AND post.post_status <> 'trash'
462
+ ORDER BY post.post_title
463
+ LIMIT 0,10
464
+ ";
465
+
466
+ $found_coupons = $wpdb->get_results($wpdb->prepare($query, '%' . $like . '%'));
467
+
468
+ wp_send_json(apply_filters('wt_json_search_found_coupons', $found_coupons));
469
+ }
470
+ }
471
+
472
+ }
473
  }
admin/modules/export/assets/js/main.js CHANGED
@@ -614,6 +614,9 @@ var wt_iew_basic_export=(function( $ ) {
614
  if(this.current_step=='filter')
615
  {
616
  this.load_meta_mapping_fields();
 
 
 
617
  }else if(this.current_step=='advanced')
618
  {
619
  wt_field_group.Set();
@@ -906,6 +909,40 @@ var wt_iew_basic_export=(function( $ ) {
906
  {
907
  return confirm("Changes that you made may not be saved.");
908
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
909
  }
910
  }
911
  return wt_iew_basic_export;
614
  if(this.current_step=='filter')
615
  {
616
  this.load_meta_mapping_fields();
617
+ if($('.wt-coupon-search').length>0){
618
+ wt_iew_basic_export.initiate_coupon_search();
619
+ }
620
  }else if(this.current_step=='advanced')
621
  {
622
  wt_field_group.Set();
909
  {
910
  return confirm("Changes that you made may not be saved.");
911
  };
912
+ },
913
+ initiate_coupon_search: function(){
914
+
915
+ jQuery('.wt-coupon-search').selectWoo({
916
+ minimumInputLength: 2,
917
+ multiple: true,
918
+ noResults: wt_iew_basic_params.msgs.no_results_found,
919
+ ajax: {
920
+ url: wt_iew_basic_params.ajax_url,
921
+ dataType: 'json',
922
+ type: "POST",
923
+ quietMillis: 50,
924
+
925
+ data: function (terms) {
926
+ return {
927
+ term: terms.term,
928
+ _wpnonce: wt_iew_basic_params.nonces.main,
929
+ action: 'wt_iew_ajax_coupon_search',
930
+ };
931
+ },
932
+ processResults: function (data) {
933
+ return {
934
+ results: jQuery.map(data, function (item) {
935
+ return {
936
+ id: item.id,
937
+ text: item.text
938
+ }
939
+ })
940
+ };
941
+ }
942
+ }
943
+ });
944
+
945
+
946
  }
947
  }
948
  return wt_iew_basic_export;
admin/modules/export/views/_export_method_export_page.php CHANGED
@@ -20,6 +20,9 @@ if (!defined('ABSPATH')) {
20
  <td colspan="2" style="width:75%;">
21
  <div class="wt_iew_radio_block">
22
  <?php
 
 
 
23
  foreach($this->export_obj->export_methods as $key => $value)
24
  {
25
  ?>
@@ -34,8 +37,8 @@ if (!defined('ABSPATH')) {
34
 
35
  </td>
36
  </tr>
37
-
38
- <!-- <tr class="wt-iew-export-method-options wt-iew-export-method-options-quick" style="display:none;">
39
  <th style="width:150px; text-align:left; vertical-align:top;"><label><?php _e('Include fields from the respective groups');?></label></th>
40
  <td colspan="2" style="width:75%;">
41
  <?php
@@ -63,8 +66,8 @@ if (!defined('ABSPATH')) {
63
  ?>
64
  <span class="wt-iew_form_help"><?php _e('Enabling any of these ensures that all the fields from the respective groups are included in your export.');?></span>
65
  </td>
66
- </tr>-->
67
-
68
 
69
  <tr class="wt-iew-export-method-options wt-iew-export-method-options-template" style="display:none;">
70
  <th><label><?php _e('Export template');?></label></th>
20
  <td colspan="2" style="width:75%;">
21
  <div class="wt_iew_radio_block">
22
  <?php
23
+ if(empty($this->mapping_templates)){
24
+ unset($this->export_obj->export_methods['template']);
25
+ }
26
  foreach($this->export_obj->export_methods as $key => $value)
27
  {
28
  ?>
37
 
38
  </td>
39
  </tr>
40
+ <?php if(!empty($this->mapping_enabled_fields)):?>
41
+ <tr class="wt-iew-export-method-options wt-iew-export-method-options-quick" style="display:none;">
42
  <th style="width:150px; text-align:left; vertical-align:top;"><label><?php _e('Include fields from the respective groups');?></label></th>
43
  <td colspan="2" style="width:75%;">
44
  <?php
66
  ?>
67
  <span class="wt-iew_form_help"><?php _e('Enabling any of these ensures that all the fields from the respective groups are included in your export.');?></span>
68
  </td>
69
+ </tr>
70
+ <?php endif; ?>
71
 
72
  <tr class="wt-iew-export-method-options wt-iew-export-method-options-template" style="display:none;">
73
  <th><label><?php _e('Export template');?></label></th>
admin/modules/import/classes/class-import-ajax.php CHANGED
@@ -222,8 +222,21 @@ class Wt_Import_Export_For_Woo_Basic_Import_Ajax
222
 
223
  /* This is the sample data from input file */
224
  $file_heading_meta_fields=(isset($_POST['file_head_meta']) ? json_decode(stripslashes($_POST['file_head_meta']), true) : array());
 
225
 
226
- //taking current page form data
 
 
 
 
 
 
 
 
 
 
 
 
227
  $meta_step_form_data=(isset($this->selected_template_form_data['meta_step_form_data']) ? $this->selected_template_form_data['meta_step_form_data'] : array());
228
 
229
  /* formdata/template data of fields in mapping page */
@@ -296,6 +309,10 @@ class Wt_Import_Export_For_Woo_Basic_Import_Ajax
296
  $checked=1; /* import this column? */
297
  $val='{'.$key.'}';
298
  unset($file_heading_meta_fields[$key]); //remove the field from file heading list
 
 
 
 
299
  }
300
  $temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
301
  }
222
 
223
  /* This is the sample data from input file */
224
  $file_heading_meta_fields=(isset($_POST['file_head_meta']) ? json_decode(stripslashes($_POST['file_head_meta']), true) : array());
225
+
226
 
227
+ $sample_data = array();
228
+ include_once WT_O_IEW_PLUGIN_PATH . 'admin/classes/class-csvreader.php';
229
+ $delimiter = (isset($_POST['delimiter']) ? ($_POST['delimiter']) : ','); //no sanitization
230
+ $reader = new Wt_Import_Export_For_Woo_Basic_Csvreader($delimiter);
231
+
232
+ /* take first two rows in csv and in xml takes column keys and a sample data */
233
+ $temp_import_file = (isset($_POST['temp_import_file']) ? sanitize_file_name($_POST['temp_import_file']) : '');
234
+ if ($temp_import_file != "") {
235
+ $file_path = $this->import_obj->get_file_path($temp_import_file);
236
+ $sample_data = $reader->get_sample_data($file_path, true);
237
+ }
238
+
239
+ //taking current page form data
240
  $meta_step_form_data=(isset($this->selected_template_form_data['meta_step_form_data']) ? $this->selected_template_form_data['meta_step_form_data'] : array());
241
 
242
  /* formdata/template data of fields in mapping page */
309
  $checked=1; /* import this column? */
310
  $val='{'.$key.'}';
311
  unset($file_heading_meta_fields[$key]); //remove the field from file heading list
312
+ }elseif(isset($val_arr['field_type']) && 'alternates' == $val_arr['field_type'] && isset ($sample_data[$val_arr['similar_fields']]) ){
313
+ $checked=1; /* import this column? */
314
+ $val='{'.$val_arr['similar_fields'].'}';
315
+ unset($file_heading_meta_fields[$key]); //remove the field from file heading list
316
  }
317
  $temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
318
  }
admin/modules/import/views/_import_mapping_page.php CHANGED
@@ -142,8 +142,8 @@ if (!defined('ABSPATH')) {
142
 
143
  if(count($mapping_fields)>0)
144
  {
145
- $array_keys_file_heading_default_fields = array_keys($file_heading_default_fields);
146
- $allowed_field_types=array('start_with', 'end_with', 'contain');
147
  foreach($mapping_fields as $key=>$val_arr)
148
  {
149
  $label=(isset($val_arr['title']) ? $val_arr['title'] : '');
@@ -152,7 +152,7 @@ if (!defined('ABSPATH')) {
152
  $val='';
153
  $checked=0; /* import this column? */
154
  // if(isset($file_heading_default_fields[$key]))
155
- if($case_key = preg_grep("/^$key$/i", $array_keys_file_heading_default_fields)) //preg_grep used escape from case sensitive check.
156
  {
157
  $checked=1; /* import this column? */
158
  // $val='{'.$key.'}';
@@ -178,6 +178,7 @@ if (!defined('ABSPATH')) {
178
  foreach ($file_heading_default_fields as $def_key => $def_val)
179
  {
180
  $matched=false;
 
181
  if($field_type=='start_with' && strpos($def_key, $key)===0)
182
  {
183
  $matched=true;
@@ -189,8 +190,20 @@ if (!defined('ABSPATH')) {
189
  elseif($field_type=='contains' && strpos($def_key, $key)!==false)
190
  {
191
  $matched=true;
 
 
 
 
192
  }
193
- if($matched)
 
 
 
 
 
 
 
 
194
  {
195
  $checked=1; // import this column?
196
  $val='{'.$def_key.'}';
142
 
143
  if(count($mapping_fields)>0)
144
  {
145
+ $array_keys_file_heading_default_fields = array_keys($file_heading_default_fields);
146
+ $allowed_field_types=array('start_with', 'end_with', 'contains', 'alternates');
147
  foreach($mapping_fields as $key=>$val_arr)
148
  {
149
  $label=(isset($val_arr['title']) ? $val_arr['title'] : '');
152
  $val='';
153
  $checked=0; /* import this column? */
154
  // if(isset($file_heading_default_fields[$key]))
155
+ if($case_key = preg_grep("/^$key$/i", $array_keys_file_heading_default_fields)) //preg_grep used escape from case sensitive check.
156
  {
157
  $checked=1; /* import this column? */
158
  // $val='{'.$key.'}';
178
  foreach ($file_heading_default_fields as $def_key => $def_val)
179
  {
180
  $matched=false;
181
+ $alternate_set = false;
182
  if($field_type=='start_with' && strpos($def_key, $key)===0)
183
  {
184
  $matched=true;
190
  elseif($field_type=='contains' && strpos($def_key, $key)!==false)
191
  {
192
  $matched=true;
193
+ }elseif($field_type=='alternates' && in_array($def_key, $val_arr['similar_fields']))
194
+ {
195
+ $alternate_set = true;
196
+ $matched = true;
197
  }
198
+
199
+ if($matched && $alternate_set)
200
+ {
201
+ $checked=1; // import this column?
202
+ $val='{'.$def_key.'}';
203
+ unset($file_heading_default_fields[$def_key]); //remove the field from file heading list
204
+ include "_import_mapping_tr_html.php";
205
+ $tr_count++;
206
+ }elseif($matched)
207
  {
208
  $checked=1; // import this column?
209
  $val='{'.$def_key.'}';
admin/modules/import/views/_import_method_import_page.php CHANGED
@@ -14,6 +14,9 @@ if (!defined('ABSPATH')) {
14
  <td colspan="2" style="width:75%;">
15
  <div class="wt_iew_radio_block">
16
  <?php
 
 
 
17
  foreach($this->import_obj->import_methods as $key => $value)
18
  {
19
  ?>
14
  <td colspan="2" style="width:75%;">
15
  <div class="wt_iew_radio_block">
16
  <?php
17
+ if(empty($this->mapping_templates)){
18
+ unset($this->import_obj->import_methods['template']);
19
+ }
20
  foreach($this->import_obj->import_methods as $key => $value)
21
  {
22
  ?>
admin/modules/order/export/export.php CHANGED
@@ -151,7 +151,7 @@ class Wt_Import_Export_For_Woo_Basic_Order_Export {
151
  $email = !empty($form_data['filter_form_data']['wt_iew_email']) ? $form_data['filter_form_data']['wt_iew_email'] : array(); // user email fields return user ids
152
  $start_date = !empty($form_data['filter_form_data']['wt_iew_date_from']) ? $form_data['filter_form_data']['wt_iew_date_from'] . ' 00:00:00' : date('Y-m-d 00:00:00', 0);
153
  $end_date = !empty($form_data['filter_form_data']['wt_iew_date_to']) ? $form_data['filter_form_data']['wt_iew_date_to'] . ' 23:59:59.99' : date('Y-m-d 23:59:59.99', current_time('timestamp'));
154
- $coupons = !empty($form_data['filter_form_data']['wt_iew_coupons']) ? array_filter(explode(',', strtolower($form_data['filter_form_data']['wt_iew_coupons'])),'trim') : array();
155
  $orders = !empty($form_data['filter_form_data']['wt_iew_orders']) ? array_filter(explode(',', strtolower($form_data['filter_form_data']['wt_iew_orders'])),'trim') : array();
156
 
157
  $export_limit = !empty($form_data['filter_form_data']['wt_iew_limit']) ? intval($form_data['filter_form_data']['wt_iew_limit']) : 999999999; //user limit
@@ -876,6 +876,7 @@ class Wt_Import_Export_For_Woo_Basic_Order_Export {
876
  if ($retun_count == FALSE) {
877
  $query .= " LIMIT " . intval($export_limit) . ' ' . (!empty($export_offset) ? 'OFFSET ' . intval($export_offset) : '');
878
  }
 
879
  $order_ids = $wpdb->get_col($query);
880
  if ($retun_count == TRUE) {
881
  return count($order_ids);
151
  $email = !empty($form_data['filter_form_data']['wt_iew_email']) ? $form_data['filter_form_data']['wt_iew_email'] : array(); // user email fields return user ids
152
  $start_date = !empty($form_data['filter_form_data']['wt_iew_date_from']) ? $form_data['filter_form_data']['wt_iew_date_from'] . ' 00:00:00' : date('Y-m-d 00:00:00', 0);
153
  $end_date = !empty($form_data['filter_form_data']['wt_iew_date_to']) ? $form_data['filter_form_data']['wt_iew_date_to'] . ' 23:59:59.99' : date('Y-m-d 23:59:59.99', current_time('timestamp'));
154
+ $coupons = !empty($form_data['filter_form_data']['wt_iew_coupons']) ? $form_data['filter_form_data']['wt_iew_coupons'] : array();
155
  $orders = !empty($form_data['filter_form_data']['wt_iew_orders']) ? array_filter(explode(',', strtolower($form_data['filter_form_data']['wt_iew_orders'])),'trim') : array();
156
 
157
  $export_limit = !empty($form_data['filter_form_data']['wt_iew_limit']) ? intval($form_data['filter_form_data']['wt_iew_limit']) : 999999999; //user limit
876
  if ($retun_count == FALSE) {
877
  $query .= " LIMIT " . intval($export_limit) . ' ' . (!empty($export_offset) ? 'OFFSET ' . intval($export_offset) : '');
878
  }
879
+
880
  $order_ids = $wpdb->get_col($query);
881
  if ($retun_count == TRUE) {
882
  return count($order_ids);
admin/modules/order/order.php CHANGED
@@ -549,12 +549,13 @@ class Wt_Import_Export_For_Woo_Basic_Order {
549
  );
550
  $fields['coupons'] = array(
551
  'label' => __('Coupons'),
552
- 'placeholder' => __('Enter coupon codes separated by ,'),
553
  'field_name' => 'coupons',
554
- 'sele_vals' => '',
555
- 'help_text' => __( 'Exports orders redeemed with specific coupon codes. For multiple coupon codes, use a comma separator.' ),
556
- 'type' => 'text',
557
- 'css_class' => '',
 
558
  );
559
 
560
  $fields['date_from'] = array(
549
  );
550
  $fields['coupons'] = array(
551
  'label' => __('Coupons'),
552
+ 'placeholder' => __('Search for a coupon&hellip;'),
553
  'field_name' => 'coupons',
554
+ 'sele_vals' => array(),
555
+ 'help_text' => __( 'Exports orders redeemed with specific coupon codes. Multiple coupon codes can be selected.' ),
556
+ 'type' => 'multi_select',
557
+ 'css_class' => 'wt-coupon-search',
558
+ 'validation_rule' => array('type'=>'text_arr')
559
  );
560
 
561
  $fields['date_from'] = array(
admin/partials/_form_field_generator.php CHANGED
@@ -229,7 +229,7 @@ foreach($form_fields as $key=>$value)
229
  }
230
  }
231
  }
232
- if(in_array('wc-customer-search', $css_class_arr)){
233
  foreach($vl as $single_vl)
234
  {
235
  $single_vl=(int) $single_vl;
@@ -250,6 +250,15 @@ foreach($form_fields as $key=>$value)
250
  }
251
  }
252
  }
 
 
 
 
 
 
 
 
 
253
  ?>
254
  </select>
255
  <?php
229
  }
230
  }
231
  }
232
+ if(in_array('wc-customer-search', $css_class_arr) || in_array('wt-user-search', $css_class_arr)){
233
  foreach($vl as $single_vl)
234
  {
235
  $single_vl=(int) $single_vl;
250
  }
251
  }
252
  }
253
+ if(in_array('wt-coupon-search', $css_class_arr)){
254
+ foreach($vl as $single_vl)
255
+ {
256
+ ?>
257
+ <option value="<?php echo $single_vl;?>" selected><?php echo $single_vl;?></option>
258
+ <?php
259
+ }
260
+ }
261
+
262
  ?>
263
  </select>
264
  <?php
includes/class-wt-import-export-for-woo.php CHANGED
@@ -80,7 +80,7 @@ class Wt_Import_Export_For_Woo_Basic {
80
  if ( defined( 'WT_O_IEW_VERSION' ) ) {
81
  $this->version = WT_O_IEW_VERSION;
82
  } else {
83
- $this->version = '2.1.6';
84
  }
85
  $this->plugin_name = 'wt-import-export-for-woo-basic';
86
 
@@ -193,7 +193,8 @@ class Wt_Import_Export_For_Woo_Basic {
193
  {
194
  //ajax hook for saving settings, Includes plugin main settings and settings from module
195
  $this->loader->add_action('wp_ajax_wt_iew_save_settings_basic',$this->plugin_admin,'save_settings');
196
- $this->loader->add_action('wp_ajax_wt_iew_delete_template',$this->plugin_admin,'delete_template');
 
197
 
198
  /* Loading admin modules */
199
  $this->plugin_admin->admin_modules();
80
  if ( defined( 'WT_O_IEW_VERSION' ) ) {
81
  $this->version = WT_O_IEW_VERSION;
82
  } else {
83
+ $this->version = '2.1.7';
84
  }
85
  $this->plugin_name = 'wt-import-export-for-woo-basic';
86
 
193
  {
194
  //ajax hook for saving settings, Includes plugin main settings and settings from module
195
  $this->loader->add_action('wp_ajax_wt_iew_save_settings_basic',$this->plugin_admin,'save_settings');
196
+ $this->loader->add_action('wp_ajax_wt_iew_delete_template',$this->plugin_admin,'delete_template');
197
+ $this->loader->add_action('wp_ajax_wt_iew_ajax_coupon_search',$this->plugin_admin,'ajax_coupon_search');
198
 
199
  /* Loading admin modules */
200
  $this->plugin_admin->admin_modules();
order-import-export-for-woocommerce.php CHANGED
@@ -6,7 +6,7 @@ Plugin URI: https://wordpress.org/plugins/order-import-export-for-woocommerce/
6
  Description: Export and Import Order detail including line items, From and To your WooCommerce Store.
7
  Author: WebToffee
8
  Author URI: https://www.webtoffee.com/product/woocommerce-order-coupon-subscription-export-import/
9
- Version: 2.1.6
10
  Text Domain: order-import-export-for-woocommerce
11
  WC tested up to: 6.1
12
  License: GPLv3
@@ -45,7 +45,7 @@ if ( !defined( 'WT_IEW_DEBUG_BASIC_TROUBLESHOOT' ) ) {
45
  * Start at version 1.0.0 and use SemVer - https://semver.org
46
  * Rename this for your plugin and update it as you release new versions.
47
  */
48
- define( 'WT_O_IEW_VERSION', '2.1.6' );
49
 
50
  /**
51
  * The code that runs during plugin activation.
6
  Description: Export and Import Order detail including line items, From and To your WooCommerce Store.
7
  Author: WebToffee
8
  Author URI: https://www.webtoffee.com/product/woocommerce-order-coupon-subscription-export-import/
9
+ Version: 2.1.7
10
  Text Domain: order-import-export-for-woocommerce
11
  WC tested up to: 6.1
12
  License: GPLv3
45
  * Start at version 1.0.0 and use SemVer - https://semver.org
46
  * Rename this for your plugin and update it as you release new versions.
47
  */
48
+ define( 'WT_O_IEW_VERSION', '2.1.7' );
49
 
50
  /**
51
  * The code that runs during plugin activation.
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: order export, woocommerce, order, export, csv, order import, woocommerce e
5
  Requires at least: 3.0.1
6
  Tested up to: 5.8
7
  Requires PHP: 5.6
8
- Stable tag: 2.1.6
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
@@ -28,8 +28,6 @@ The following are functionalities offered by the basic version of the plugin.
28
  &#128312; Bulk update WooCommerce orders and coupons.
29
  &#128312; Compatible with YITH WooCommerce Order Tracking plugin.
30
  &#128312; Supports various export filters (order status, product, coupon, customer, date range)
31
- &#128312; Export Subscription orders to a CSV file(Premium Feature).
32
- &#128312; Import Subscription orders from a CSV file(Premium Feature).
33
  &#128312; Tested OK with WooCommerce 6.1
34
  &#128312; Tested OK with WP 5.8
35
  &#128312; Tested OK with PHP 8.0
@@ -43,6 +41,9 @@ Additional features that will help you in the CSV export and import process:
43
  &#128312; Skip or update existing orders/coupons while importing.
44
  &#128312; Create and maintain import and export history with options to re-run, view logs, and delete an entry
45
  &#128312; Log of the import and export will help in identifying what went wrong for debugging purposes.
 
 
 
46
 
47
  More information about the setup of the plugin and a sample CSV that is taken as input by the plugin are given in the <a rel="nofollow" href="https://www.webtoffee.com/order-coupon-subscription-export-import-plugin-woocommerce-user-guide/">free order export import plugin</a> setup guide.
48
 
@@ -225,6 +226,8 @@ Yes.
225
 
226
  == Changelog ==
227
 
 
 
228
  = 2.1.6 =
229
  * WC 6.1 Tested OK
230
  * Help text updated.
@@ -481,6 +484,5 @@ Yes.
481
 
482
  == Upgrade Notice ==
483
 
484
- = 2.1.6 =
485
- * WC 6.1 Tested OK
486
- * Help text updated.
5
  Requires at least: 3.0.1
6
  Tested up to: 5.8
7
  Requires PHP: 5.6
8
+ Stable tag: 2.1.7
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
28
  &#128312; Bulk update WooCommerce orders and coupons.
29
  &#128312; Compatible with YITH WooCommerce Order Tracking plugin.
30
  &#128312; Supports various export filters (order status, product, coupon, customer, date range)
 
 
31
  &#128312; Tested OK with WooCommerce 6.1
32
  &#128312; Tested OK with WP 5.8
33
  &#128312; Tested OK with PHP 8.0
41
  &#128312; Skip or update existing orders/coupons while importing.
42
  &#128312; Create and maintain import and export history with options to re-run, view logs, and delete an entry
43
  &#128312; Log of the import and export will help in identifying what went wrong for debugging purposes.
44
+ &#128312; Auto-suggestion of coupon codes making coupon-based filtering easier.
45
+ &#128312; Export Subscription orders to a CSV file.
46
+ &#128312; Import Subscription orders from a CSV file.
47
 
48
  More information about the setup of the plugin and a sample CSV that is taken as input by the plugin are given in the <a rel="nofollow" href="https://www.webtoffee.com/order-coupon-subscription-export-import-plugin-woocommerce-user-guide/">free order export import plugin</a> setup guide.
49
 
226
 
227
  == Changelog ==
228
 
229
+ = 2.1.7 =
230
+ * Enhancement: Auto-suggestion of coupon codes making coupon-based filtering easier.
231
  = 2.1.6 =
232
  * WC 6.1 Tested OK
233
  * Help text updated.
484
 
485
  == Upgrade Notice ==
486
 
487
+ = 2.1.7 =
488
+ * Enhancement: Auto-suggestion of coupon codes making coupon-based filtering easier.