Advanced Woo Search - Version 1.79

Version Description

  • Add - Synonyms support
  • Add - Search by product ID
  • Fix - Divi theme integration bug with double search form
  • Fix - Bug with cache for search results
  • Fix - Support for WooCommerce hooks
  • Fix - Support for search exclude plugin
Download this release

Release Info

Developer Mihail Barinov
Plugin Icon 128x128 Advanced Woo Search
Version 1.79
Comparing to
See all releases

Code changes from version 1.78 to 1.79

advanced-woo-search.php CHANGED
@@ -3,7 +3,7 @@
3
  /*
4
  Plugin Name: Advanced Woo Search
5
  Description: Advance ajax WooCommerce product search.
6
- Version: 1.78
7
  Author: ILLID
8
  Author URI: https://advanced-woo-search.com/
9
  Text Domain: advanced-woo-search
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
- define( 'AWS_VERSION', '1.78' );
20
 
21
 
22
  define( 'AWS_DIR', dirname( __FILE__ ) );
3
  /*
4
  Plugin Name: Advanced Woo Search
5
  Description: Advance ajax WooCommerce product search.
6
+ Version: 1.79
7
  Author: ILLID
8
  Author URI: https://advanced-woo-search.com/
9
  Text Domain: advanced-woo-search
16
  exit;
17
  }
18
 
19
+ define( 'AWS_VERSION', '1.79' );
20
 
21
 
22
  define( 'AWS_DIR', dirname( __FILE__ ) );
assets/js/common.js CHANGED
@@ -47,7 +47,7 @@
47
  return;
48
  }
49
 
50
- if ( typeof cachedResponse[searchFor] != 'undefined') {
51
  methods.showResults( cachedResponse[searchFor] );
52
  return;
53
  }
47
  return;
48
  }
49
 
50
+ if ( cachedResponse.hasOwnProperty( searchFor ) ) {
51
  methods.showResults( cachedResponse[searchFor] );
52
  return;
53
  }
includes/class-aws-admin-fields.php CHANGED
@@ -86,7 +86,9 @@ if ( ! class_exists( 'AWS_Admin_Fields' ) ) :
86
  <tr valign="top">
87
  <th scope="row"><?php echo esc_html( $value['name'] ); ?></th>
88
  <td>
89
- <textarea id="<?php echo esc_attr( $value['id'] ); ?>" name="<?php echo esc_attr( $value['id'] ); ?>" cols="65" rows="4"><?php print stripslashes( $plugin_options[ $value['id'] ] ); ?></textarea>
 
 
90
  <br><span class="description"><?php echo wp_kses_post( $value['desc'] ); ?></span>
91
  </td>
92
  </tr>
86
  <tr valign="top">
87
  <th scope="row"><?php echo esc_html( $value['name'] ); ?></th>
88
  <td>
89
+ <?php $textarea_cols = isset( $value['cols'] ) ? $value['cols'] : "55"; ?>
90
+ <?php $textarea_rows = isset( $value['rows'] ) ? $value['rows'] : "4"; ?>
91
+ <textarea id="<?php echo esc_attr( $value['id'] ); ?>" name="<?php echo esc_attr( $value['id'] ); ?>" cols="<?php echo $textarea_cols; ?>" rows="<?php echo $textarea_rows; ?>"><?php print stripslashes( $plugin_options[ $value['id'] ] ); ?></textarea>
92
  <br><span class="description"><?php echo wp_kses_post( $value['desc'] ); ?></span>
93
  </td>
94
  </tr>
includes/class-aws-admin.php CHANGED
@@ -112,6 +112,16 @@ class AWS_Admin {
112
  }
113
 
114
  $new_value = isset( $_POST[ $values['id'] ] ) ? $_POST[ $values['id'] ] : '';
 
 
 
 
 
 
 
 
 
 
115
  $update_settings[ $values['id'] ] = (string) sanitize_text_field( $new_value );
116
 
117
  if ( isset( $values['sub_option'] ) ) {
@@ -254,6 +264,15 @@ class AWS_Admin {
254
  continue;
255
  }
256
 
 
 
 
 
 
 
 
 
 
257
  $default_settings[$values['id']] = (string) sanitize_text_field( $values['value'] );
258
 
259
  if (isset( $values['sub_option'])) {
112
  }
113
 
114
  $new_value = isset( $_POST[ $values['id'] ] ) ? $_POST[ $values['id'] ] : '';
115
+
116
+ if ( $values['type'] === 'textarea' ) {
117
+ if ( function_exists('sanitize_textarea_field') ) {
118
+ $update_settings[ $values['id'] ] = (string) sanitize_textarea_field( $new_value );
119
+ } else {
120
+ $update_settings[ $values['id'] ] = (string) str_replace( "<\n", "&lt;\n", wp_strip_all_tags( $new_value ) );
121
+ }
122
+ continue;
123
+ }
124
+
125
  $update_settings[ $values['id'] ] = (string) sanitize_text_field( $new_value );
126
 
127
  if ( isset( $values['sub_option'] ) ) {
264
  continue;
265
  }
266
 
267
+ if ( $values['type'] === 'textarea' ) {
268
+ if ( function_exists('sanitize_textarea_field') ) {
269
+ $default_settings[ $values['id'] ] = (string) sanitize_textarea_field( $values['value'] );
270
+ } else {
271
+ $default_settings[ $values['id'] ] = (string) str_replace( "<\n", "&lt;\n", wp_strip_all_tags( $values['value'] ) );
272
+ }
273
+ continue;
274
+ }
275
+
276
  $default_settings[$values['id']] = (string) sanitize_text_field( $values['value'] );
277
 
278
  if (isset( $values['sub_option'])) {
includes/class-aws-helpers.php CHANGED
@@ -486,6 +486,65 @@ if ( ! class_exists( 'AWS_Helpers' ) ) :
486
 
487
  }
488
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
  /*
490
  * Strip shortcodes
491
  */
486
 
487
  }
488
 
489
+ /*
490
+ * Add synonyms
491
+ */
492
+ static public function get_synonyms( $str_array ) {
493
+
494
+ $synonyms = AWS()->get_settings( 'synonyms' );
495
+ $synonyms_array = array();
496
+ $new_str_array = array();
497
+
498
+ if ( $synonyms ) {
499
+ $synonyms_array = preg_split( '/\r\n|\r|\n|&#13;&#10;/', $synonyms );
500
+ }
501
+
502
+ if ( $str_array && is_array( $str_array ) && ! empty( $str_array ) && $synonyms_array && ! empty( $synonyms_array ) ) {
503
+
504
+ $synonyms_array = array_map( 'trim', $synonyms_array );
505
+
506
+ /**
507
+ * Filters synonyms array before adding them to the index table where need
508
+ * @since 1.79
509
+ * @param array $synonyms_array Array of synonyms groups
510
+ */
511
+ $synonyms_array = apply_filters( 'aws_synonyms_option_array', $synonyms_array );
512
+
513
+ foreach ( $synonyms_array as $synonyms_string ) {
514
+
515
+ if ( $synonyms_string ) {
516
+
517
+ $synonym_array = explode( ',', $synonyms_string );
518
+
519
+ if ( $synonym_array && ! empty( $synonym_array ) ) {
520
+ $synonym_array = array_map( 'trim', $synonym_array );
521
+ foreach ( $synonym_array as $synonym_item ) {
522
+ if ( $synonym_item && isset( $str_array[$synonym_item] ) ) {
523
+ $new_str_array = array_merge( $new_str_array, $synonym_array );
524
+ break;
525
+ }
526
+ }
527
+ }
528
+
529
+ }
530
+
531
+ }
532
+
533
+ }
534
+
535
+ if ( $new_str_array ) {
536
+ $new_str_array = array_unique( $new_str_array );
537
+ foreach ( $new_str_array as $new_str_array_item ) {
538
+ if ( ! isset( $str_array[$new_str_array_item] ) ) {
539
+ $str_array[$new_str_array_item] = 1;
540
+ }
541
+ }
542
+ }
543
+
544
+ return $str_array;
545
+
546
+ }
547
+
548
  /*
549
  * Strip shortcodes
550
  */
includes/class-aws-integrations.php CHANGED
@@ -75,11 +75,17 @@ if ( ! class_exists( 'AWS_Integrations' ) ) :
75
  // Seamless integration
76
  if ( AWS()->get_settings( 'seamless' ) === 'true' ) {
77
  add_filter( 'et_html_main_header', array( $this, 'et_html_main_header' ) );
 
78
  }
79
 
80
  // Wholesale plugin hide certain products
81
  if ( class_exists( 'WooCommerceWholeSalePrices' ) ) {
82
- add_filter( 'aws_search_results_products', array( $this,'wholesale_hide_products' ) );
 
 
 
 
 
83
  }
84
 
85
  }
@@ -390,11 +396,18 @@ if ( ! class_exists( 'AWS_Integrations' ) ) :
390
  */
391
  public function et_html_main_header( $html ) {
392
  if ( function_exists( 'aws_get_search_form' ) ) {
393
- $pattern = '/(<form.*?<\/form>)/i';
 
394
  $form = aws_get_search_form(false);
395
- $html = '<style>.aws-container { float: right;margin-right: 40px;margin-top: 20px; }</style>' . $html;
 
 
 
 
 
396
  $html = trim(preg_replace('/\s\s+/', ' ', $html));
397
  $html = preg_replace( $pattern, $form, $html );
 
398
  }
399
  return $html;
400
  }
@@ -440,6 +453,25 @@ if ( ! class_exists( 'AWS_Integrations' ) ) :
440
 
441
  }
442
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
443
  }
444
 
445
  endif;
75
  // Seamless integration
76
  if ( AWS()->get_settings( 'seamless' ) === 'true' ) {
77
  add_filter( 'et_html_main_header', array( $this, 'et_html_main_header' ) );
78
+ add_filter( 'et_html_slide_header', array( $this, 'et_html_main_header' ) );
79
  }
80
 
81
  // Wholesale plugin hide certain products
82
  if ( class_exists( 'WooCommerceWholeSalePrices' ) ) {
83
+ add_filter( 'aws_search_results_products', array( $this,'wholesale_hide_products' ) );
84
+ }
85
+
86
+ // Search Exclude plugin
87
+ if ( class_exists( 'SearchExclude' ) ) {
88
+ add_filter( 'aws_index_product_ids', array( $this, 'search_exclude_filter' ) );
89
  }
90
 
91
  }
396
  */
397
  public function et_html_main_header( $html ) {
398
  if ( function_exists( 'aws_get_search_form' ) ) {
399
+
400
+ $pattern = '/(<form[\s\S]*?<\/form>)/i';
401
  $form = aws_get_search_form(false);
402
+
403
+ if ( strpos( $html, 'aws-container' ) !== false ) {
404
+ $pattern = '/(<div class="aws-container"[\s\S]*?<form.*?<\/form><\/div>)/i';
405
+ }
406
+
407
+ $html = '<style>.et_search_outer .aws-container { float: right;margin-right: 40px;margin-top: 20px; }</style>' . $html;
408
  $html = trim(preg_replace('/\s\s+/', ' ', $html));
409
  $html = preg_replace( $pattern, $form, $html );
410
+
411
  }
412
  return $html;
413
  }
453
 
454
  }
455
 
456
+ /*
457
+ * Remove products that was excluded with Search Exclude plugin ( https://wordpress.org/plugins/search-exclude/ )
458
+ */
459
+ public function search_exclude_filter( $products ) {
460
+
461
+ $excluded = get_option('sep_exclude');
462
+
463
+ if ( $excluded && is_array( $excluded ) && ! empty( $excluded ) && $products && is_array( $products ) ) {
464
+ foreach( $products as $key => $product_id ) {
465
+ if ( false !== array_search( $product_id, $excluded ) ) {
466
+ unset( $products[$key] );
467
+ }
468
+ }
469
+ }
470
+
471
+ return $products;
472
+
473
+ }
474
+
475
  }
476
 
477
  endif;
includes/class-aws-markup.php CHANGED
@@ -52,7 +52,7 @@ if ( ! class_exists( 'AWS_Markup' ) ) :
52
  $params_string = '';
53
 
54
  $params = array(
55
- 'data-url' => admin_url('admin-ajax.php'),
56
  'data-siteurl' => home_url(),
57
  'data-lang' => $current_lang ? $current_lang : '',
58
  'data-show-loader' => $show_loader,
52
  $params_string = '';
53
 
54
  $params = array(
55
+ 'data-url' => class_exists( 'WC_AJAX' ) ? WC_AJAX::get_endpoint( 'aws_action' ) : admin_url( 'admin-ajax.php' ),
56
  'data-siteurl' => home_url(),
57
  'data-lang' => $current_lang ? $current_lang : '',
58
  'data-show-loader' => $show_loader,
includes/class-aws-search.php CHANGED
@@ -49,8 +49,12 @@ if ( ! class_exists( 'AWS_Search' ) ) :
49
 
50
  $this->data['settings'] = get_option( 'aws_settings' );
51
 
52
- add_action( 'wp_ajax_aws_action', array( $this, 'action_callback' ) );
53
- add_action( 'wp_ajax_nopriv_aws_action', array( $this, 'action_callback' ) );
 
 
 
 
54
 
55
  }
56
 
@@ -343,6 +347,11 @@ if ( ! class_exists( 'AWS_Search' ) ) :
343
  $relevance_array['sku'][] = $wpdb->prepare( "( case when ( term_source = 'sku' AND term LIKE %s ) then 50 else 0 end )", $like );
344
  break;
345
 
 
 
 
 
 
346
  }
347
 
348
  }
49
 
50
  $this->data['settings'] = get_option( 'aws_settings' );
51
 
52
+ if ( isset( $_REQUEST['wc-ajax'] ) ) {
53
+ add_action( 'wc_ajax_aws_action', array( $this, 'action_callback' ) );
54
+ } else {
55
+ add_action( 'wp_ajax_aws_action', array( $this, 'action_callback' ) );
56
+ add_action( 'wp_ajax_nopriv_aws_action', array( $this, 'action_callback' ) );
57
+ }
58
 
59
  }
60
 
347
  $relevance_array['sku'][] = $wpdb->prepare( "( case when ( term_source = 'sku' AND term LIKE %s ) then 50 else 0 end )", $like );
348
  break;
349
 
350
+ case 'id':
351
+ $relevance_array['id'][] = $wpdb->prepare( "( case when ( term_source = 'id' AND term = '%s' ) then 300 else 0 end )", $search_term );
352
+ $relevance_array['id'][] = $wpdb->prepare( "( case when ( term_source = 'id' AND term LIKE %s ) then 5 else 0 end )", $like );
353
+ break;
354
+
355
  }
356
 
357
  }
includes/class-aws-table.php CHANGED
@@ -290,6 +290,13 @@ if ( ! class_exists( 'AWS_Table' ) ) :
290
  */
291
  private function fill_table( $posts ) {
292
 
 
 
 
 
 
 
 
293
  foreach ( $posts as $found_post_id ) {
294
 
295
  $data = array();
@@ -297,10 +304,6 @@ if ( ! class_exists( 'AWS_Table' ) ) :
297
  $data['terms'] = array();
298
  $data['id'] = $found_post_id;
299
 
300
- if ( $this->is_excluded( $data['id'] ) ) {
301
- continue;
302
- }
303
-
304
  $product = wc_get_product( $data['id'] );
305
 
306
  if( ! is_a( $product, 'WC_Product' ) ) {
@@ -327,6 +330,8 @@ if ( ! class_exists( 'AWS_Table' ) ) :
327
 
328
  $sku = $product->get_sku();
329
 
 
 
330
  $title = apply_filters( 'the_title', get_the_title( $data['id'] ), $data['id'] );
331
 
332
  $content = apply_filters( 'the_content', get_post_field( 'post_content', $data['id'] ), $data['id'] );
@@ -355,6 +360,8 @@ if ( ! class_exists( 'AWS_Table' ) ) :
355
  $sku = $sku . ' ' . $variation_sku;
356
  }
357
 
 
 
358
  if ( $variation_desc ) {
359
  $content = $content . ' ' . $variation_desc;
360
  }
@@ -428,6 +435,7 @@ if ( ! class_exists( 'AWS_Table' ) ) :
428
  $data['terms']['content'] = $this->extract_terms( $content );
429
  $data['terms']['excerpt'] = $this->extract_terms( $excerpt );
430
  $data['terms']['sku'] = $this->extract_terms( $sku );
 
431
 
432
 
433
  if ( $cat_array && ! empty( $cat_array ) ) {
@@ -476,6 +484,7 @@ if ( ! class_exists( 'AWS_Table' ) ) :
476
  $translated_post_data['terms']['content'] = $this->extract_terms( $translated_content );
477
  $translated_post_data['terms']['excerpt'] = $this->extract_terms( $translated_excerpt );
478
  $translated_post_data['terms']['sku'] = $this->extract_terms( $sku );
 
479
 
480
 
481
  //Insert translated product data into table
@@ -525,6 +534,7 @@ if ( ! class_exists( 'AWS_Table' ) ) :
525
  $translated_post_data['terms']['content'] = $this->extract_terms( $translated_content );
526
  $translated_post_data['terms']['excerpt'] = $this->extract_terms( $translated_excerpt );
527
  $translated_post_data['terms']['sku'] = $this->extract_terms( $sku );
 
528
 
529
 
530
  //Insert translated product data into table
@@ -735,23 +745,6 @@ if ( ! class_exists( 'AWS_Table' ) ) :
735
 
736
  }
737
 
738
- /*
739
- * Check is product excluded with Search Exclude plugin ( https://wordpress.org/plugins/search-exclude/ )
740
- */
741
- private function is_excluded( $id ) {
742
-
743
- $excluded = get_option('sep_exclude');
744
-
745
- if ( $excluded && is_array( $excluded ) && ! empty( $excluded ) ) {
746
- if ( false !== array_search( $id, $excluded ) ) {
747
- return true;
748
- }
749
- }
750
-
751
- return false;
752
-
753
- }
754
-
755
  /*
756
  * Extract terms from content
757
  */
@@ -836,6 +829,8 @@ if ( ! class_exists( 'AWS_Table' ) ) :
836
  }
837
  }
838
 
 
 
839
  return $str_new_array;
840
 
841
  }
290
  */
291
  private function fill_table( $posts ) {
292
 
293
+ /**
294
+ * Products that will be indexed
295
+ * @since 1.79
296
+ * @param array $posts Array of products IDs
297
+ */
298
+ $posts = apply_filters( 'aws_index_product_ids', $posts );
299
+
300
  foreach ( $posts as $found_post_id ) {
301
 
302
  $data = array();
304
  $data['terms'] = array();
305
  $data['id'] = $found_post_id;
306
 
 
 
 
 
307
  $product = wc_get_product( $data['id'] );
308
 
309
  if( ! is_a( $product, 'WC_Product' ) ) {
330
 
331
  $sku = $product->get_sku();
332
 
333
+ $ids = $data['id'];
334
+
335
  $title = apply_filters( 'the_title', get_the_title( $data['id'] ), $data['id'] );
336
 
337
  $content = apply_filters( 'the_content', get_post_field( 'post_content', $data['id'] ), $data['id'] );
360
  $sku = $sku . ' ' . $variation_sku;
361
  }
362
 
363
+ $ids = $ids . ' ' . $child_id;
364
+
365
  if ( $variation_desc ) {
366
  $content = $content . ' ' . $variation_desc;
367
  }
435
  $data['terms']['content'] = $this->extract_terms( $content );
436
  $data['terms']['excerpt'] = $this->extract_terms( $excerpt );
437
  $data['terms']['sku'] = $this->extract_terms( $sku );
438
+ $data['terms']['id'] = $this->extract_terms( $ids );
439
 
440
 
441
  if ( $cat_array && ! empty( $cat_array ) ) {
484
  $translated_post_data['terms']['content'] = $this->extract_terms( $translated_content );
485
  $translated_post_data['terms']['excerpt'] = $this->extract_terms( $translated_excerpt );
486
  $translated_post_data['terms']['sku'] = $this->extract_terms( $sku );
487
+ $translated_post_data['terms']['id'] = $this->extract_terms( $translated_post->ID );
488
 
489
 
490
  //Insert translated product data into table
534
  $translated_post_data['terms']['content'] = $this->extract_terms( $translated_content );
535
  $translated_post_data['terms']['excerpt'] = $this->extract_terms( $translated_excerpt );
536
  $translated_post_data['terms']['sku'] = $this->extract_terms( $sku );
537
+ $translated_post_data['terms']['id'] = $this->extract_terms( $ids );
538
 
539
 
540
  //Insert translated product data into table
745
 
746
  }
747
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748
  /*
749
  * Extract terms from content
750
  */
829
  }
830
  }
831
 
832
+ $str_new_array = AWS_Helpers::get_synonyms( $str_new_array );
833
+
834
  return $str_new_array;
835
 
836
  }
includes/class-aws-versions.php CHANGED
@@ -270,6 +270,19 @@ if ( ! class_exists( 'AWS_Versions' ) ) :
270
 
271
  }
272
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
  update_option( 'aws_plugin_ver', AWS_VERSION );
270
 
271
  }
272
 
273
+ if ( version_compare( $current_version, '1.79', '<' ) ) {
274
+
275
+ $settings = get_option( 'aws_settings' );
276
+
277
+ if ( $settings ) {
278
+ if ( ! isset( $settings['synonyms'] ) ) {
279
+ $settings['synonyms'] = 'buy, pay, purchase, acquire&#13;&#10;box, housing, unit, package';
280
+ update_option( 'aws_settings', $settings );
281
+ }
282
+ }
283
+
284
+ }
285
+
286
  }
287
 
288
  update_option( 'aws_plugin_ver', AWS_VERSION );
includes/options.php CHANGED
@@ -52,7 +52,7 @@ $options['general'][] = array(
52
  "desc" => __( "Search source: Drag&drop sources to activate or deactivate them.", "advanced-woo-search" ),
53
  "id" => "search_in",
54
  "value" => "title,content,sku,excerpt",
55
- "choices" => array( "title", "content", "sku", "excerpt", "category", "tag" ),
56
  "type" => "sortable"
57
  );
58
 
@@ -73,6 +73,18 @@ $options['general'][] = array(
73
  "desc" => __( "Comma separated list of words that will be excluded from search.", "advanced-woo-search" ) . '<br>' . __( "Re-index required on change.", "advanced-woo-search" ),
74
  "id" => "stopwords",
75
  "value" => "a, also, am, an, and, are, as, at, be, but, by, call, can, co, con, de, do, due, eg, eight, etc, even, ever, every, for, from, full, go, had, has, hasnt, have, he, hence, her, here, his, how, ie, if, in, inc, into, is, it, its, ltd, me, my, no, none, nor, not, now, of, off, on, once, one, only, onto, or, our, ours, out, over, own, part, per, put, re, see, so, some, ten, than, that, the, their, there, these, they, this, three, thru, thus, to, too, top, un, up, us, very, via, was, we, well, were, what, when, where, who, why, will",
 
 
 
 
 
 
 
 
 
 
 
 
76
  "type" => "textarea"
77
  );
78
 
52
  "desc" => __( "Search source: Drag&drop sources to activate or deactivate them.", "advanced-woo-search" ),
53
  "id" => "search_in",
54
  "value" => "title,content,sku,excerpt",
55
+ "choices" => array( "title", "content", "sku", "excerpt", "category", "tag", "id" ),
56
  "type" => "sortable"
57
  );
58
 
73
  "desc" => __( "Comma separated list of words that will be excluded from search.", "advanced-woo-search" ) . '<br>' . __( "Re-index required on change.", "advanced-woo-search" ),
74
  "id" => "stopwords",
75
  "value" => "a, also, am, an, and, are, as, at, be, but, by, call, can, co, con, de, do, due, eg, eight, etc, even, ever, every, for, from, full, go, had, has, hasnt, have, he, hence, her, here, his, how, ie, if, in, inc, into, is, it, its, ltd, me, my, no, none, nor, not, now, of, off, on, once, one, only, onto, or, our, ours, out, over, own, part, per, put, re, see, so, some, ten, than, that, the, their, there, these, they, this, three, thru, thus, to, too, top, un, up, us, very, via, was, we, well, were, what, when, where, who, why, will",
76
+ "cols" => "85",
77
+ "rows" => "3",
78
+ "type" => "textarea"
79
+ );
80
+
81
+ $options['general'][] = array(
82
+ "name" => __( "Synonyms", "advanced-woo-search" ),
83
+ "desc" => __( "Comma separated list of synonym words. Each group of synonyms must be on separated text line.", "advanced-woo-search" ) . '<br>' . __( "Re-index required on change.", "advanced-woo-search" ),
84
+ "id" => "synonyms",
85
+ "value" => "buy, pay, purchase, acquire&#13;&#10;box, housing, unit, package",
86
+ "cols" => "85",
87
+ "rows" => "3",
88
  "type" => "textarea"
89
  );
90
 
languages/advanced-woo-search.pot CHANGED
@@ -406,6 +406,12 @@ msgstr ""
406
  msgid "Re-index required on change."
407
  msgstr ""
408
 
 
 
 
 
 
 
409
  #: includes/options.php:42
410
  msgid "Use Google Analytics"
411
  msgstr ""
406
  msgid "Re-index required on change."
407
  msgstr ""
408
 
409
+ msgid "Synonyms"
410
+ msgstr ""
411
+
412
+ msgid "Comma separated list of synonym words. Each group of synonyms must be on separated text line."
413
+ msgstr ""
414
+
415
  #: includes/options.php:42
416
  msgid "Use Google Analytics"
417
  msgstr ""
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: widget, plugin, woocommerce, search, product search, woocommerce search, ajax search, live search, custom search, ajax, shortcode, better search, relevance search, relevant search, search by sku, search plugin, shop, store, wordpress search, wp ajax search, wp search, wp search plugin, sidebar, ecommerce, merketing, products, category search, instant-search, search highlight, woocommerce advanced search, woocommerce live search, WooCommerce Plugin, woocommerce product search
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
- Stable tag: 1.78
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -17,7 +17,7 @@ Advanced Woo Search - powerful live search plugin for WooCommerce. Just start ty
17
  = Main Features =
18
 
19
  * **Products search** - Search across all your WooCommerce products
20
- * **Search in** - Search in product **title**, **content**, **excerpt**, **categories**, **tags** and **sku**. Or just in some of them
21
  * **Settings page** - User-friendly settings page with lot of options
22
  * **Shortcode** and **widget** - Use shortcode and widget to place search box anywhere you want
23
  * **Product image** - Each search result contains product image
@@ -29,7 +29,8 @@ Advanced Woo Search - powerful live search plugin for WooCommerce. Just start ty
29
  * Supports **variable products**
30
  * Support for your current **search page**. Plugin search results will be integrated to your current page layout.
31
  * Automatically synchronize all products data. No need to re-index all content manually after avery change.
32
- * Plurals support
 
33
  * Diacritical marks support
34
  * Google Analytics support
35
  * Seamless integration option for easy replacing your current search form
@@ -103,6 +104,14 @@ Yep. This plugin is always compatible with the latest version of Woocommerce?
103
 
104
  == Changelog ==
105
 
 
 
 
 
 
 
 
 
106
  = 1.78 =
107
  * Update - Better plurals search support
108
  * Add - Divi theme seamless integration
4
  Tags: widget, plugin, woocommerce, search, product search, woocommerce search, ajax search, live search, custom search, ajax, shortcode, better search, relevance search, relevant search, search by sku, search plugin, shop, store, wordpress search, wp ajax search, wp search, wp search plugin, sidebar, ecommerce, merketing, products, category search, instant-search, search highlight, woocommerce advanced search, woocommerce live search, WooCommerce Plugin, woocommerce product search
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
+ Stable tag: 1.79
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
17
  = Main Features =
18
 
19
  * **Products search** - Search across all your WooCommerce products
20
+ * **Search in** - Search in product **title**, **content**, **excerpt**, **categories**, **tags**, **ID** and **sku**. Or just in some of them
21
  * **Settings page** - User-friendly settings page with lot of options
22
  * **Shortcode** and **widget** - Use shortcode and widget to place search box anywhere you want
23
  * **Product image** - Each search result contains product image
29
  * Supports **variable products**
30
  * Support for your current **search page**. Plugin search results will be integrated to your current page layout.
31
  * Automatically synchronize all products data. No need to re-index all content manually after avery change.
32
+ * **Plurals** support
33
+ * **Synonyms** support
34
  * Diacritical marks support
35
  * Google Analytics support
36
  * Seamless integration option for easy replacing your current search form
104
 
105
  == Changelog ==
106
 
107
+ = 1.79 =
108
+ * Add - Synonyms support
109
+ * Add - Search by product ID
110
+ * Fix - Divi theme integration bug with double search form
111
+ * Fix - Bug with cache for search results
112
+ * Fix - Support for WooCommerce hooks
113
+ * Fix - Support for search exclude plugin
114
+
115
  = 1.78 =
116
  * Update - Better plurals search support
117
  * Add - Divi theme seamless integration