Version Description
- Major fix: Changes in WooCommerce 4.4.0 broke the Relevanssi searches. This makes the WooCommerce search work again.
- Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). Now the extra spaces don't matter.
- Minor fix: The asynchronous doc count action in the previous version could cause an infinite loop with the Snitch logger plugin. This is prevented now: the async action doesn't run after indexing unless a post is actually indexed.
- Minor fix: Relevanssi indexing procedure was triggered for autosaved drafts, causing possible problems with the asynchronous doc count action.
- Minor fix: The
relevanssi_index_custom_fieldsfilter hook was not applied when doing phrase matching, thus phrases could not be found when they were in custom fields added with the filter.
Download this release
Release Info
| Developer | msaari |
| Plugin | |
| Version | 4.8.1 |
| Comparing to | |
| See all releases | |
Code changes from version 4.8.0 to 4.8.1
- lib/admin-ajax.php +1 -0
- lib/common.php +18 -9
- lib/compatibility/woocommerce.php +17 -0
- lib/excerpts-highlights.php +4 -1
- lib/indexing.php +9 -3
- lib/log.php +1 -0
- readme.txt +11 -1
- relevanssi.php +2 -2
lib/admin-ajax.php
CHANGED
|
@@ -15,6 +15,7 @@ add_action( 'wp_ajax_relevanssi_count_missing_posts', 'relevanssi_count_missing_
|
|
| 15 |
add_action( 'wp_ajax_relevanssi_list_categories', 'relevanssi_list_categories' );
|
| 16 |
add_action( 'wp_ajax_relevanssi_admin_search', 'relevanssi_admin_search' );
|
| 17 |
add_action( 'wp_ajax_relevanssi_update_counts', 'relevanssi_update_counts' );
|
|
|
|
| 18 |
|
| 19 |
/**
|
| 20 |
* Truncates the Relevanssi index.
|
| 15 |
add_action( 'wp_ajax_relevanssi_list_categories', 'relevanssi_list_categories' );
|
| 16 |
add_action( 'wp_ajax_relevanssi_admin_search', 'relevanssi_admin_search' );
|
| 17 |
add_action( 'wp_ajax_relevanssi_update_counts', 'relevanssi_update_counts' );
|
| 18 |
+
add_action( 'wp_ajax_nopriv_relevanssi_update_counts', 'relevanssi_update_counts' );
|
| 19 |
|
| 20 |
/**
|
| 21 |
* Truncates the Relevanssi index.
|
lib/common.php
CHANGED
|
@@ -414,8 +414,9 @@ function relevanssi_recognize_phrases( $search_query, $operator = 'AND' ) {
|
|
| 414 |
return $all_queries;
|
| 415 |
}
|
| 416 |
|
|
|
|
|
|
|
| 417 |
$taxonomies = get_option( 'relevanssi_index_taxonomies_list', array() );
|
| 418 |
-
$custom_fields = relevanssi_get_custom_fields();
|
| 419 |
$excerpts = get_option( 'relevanssi_index_excerpt', 'off' );
|
| 420 |
$index_pdf_parent = get_option( 'relevanssi_index_pdf_parent' );
|
| 421 |
|
|
@@ -545,15 +546,21 @@ function relevanssi_generate_phrase_queries( $phrases, $taxonomies, $custom_fiel
|
|
| 545 |
|
| 546 |
if ( is_array( $custom_fields ) ) {
|
| 547 |
array_push( $custom_fields, '_relevanssi_pdf_content' );
|
| 548 |
-
$custom_fields_escaped = implode(
|
| 549 |
-
"','",
|
| 550 |
-
array_map(
|
| 551 |
-
'esc_sql',
|
| 552 |
-
$custom_fields
|
| 553 |
-
)
|
| 554 |
-
);
|
| 555 |
|
| 556 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 557 |
}
|
| 558 |
|
| 559 |
if ( 'visible' === $custom_fields ) {
|
|
@@ -2062,6 +2069,8 @@ function relevanssi_remove_page_builder_shortcodes( $content ) {
|
|
| 2062 |
'/\[ai1ec.*?\]/im',
|
| 2063 |
'/\[eme_.*?\]/im',
|
| 2064 |
'/\[layerslider.*?\]/im',
|
|
|
|
|
|
|
| 2065 |
),
|
| 2066 |
$context
|
| 2067 |
);
|
| 414 |
return $all_queries;
|
| 415 |
}
|
| 416 |
|
| 417 |
+
/* Documented in lib/indexing.php. */
|
| 418 |
+
$custom_fields = apply_filters( 'relevanssi_index_custom_fields', relevanssi_get_custom_fields() );
|
| 419 |
$taxonomies = get_option( 'relevanssi_index_taxonomies_list', array() );
|
|
|
|
| 420 |
$excerpts = get_option( 'relevanssi_index_excerpt', 'off' );
|
| 421 |
$index_pdf_parent = get_option( 'relevanssi_index_pdf_parent' );
|
| 422 |
|
| 546 |
|
| 547 |
if ( is_array( $custom_fields ) ) {
|
| 548 |
array_push( $custom_fields, '_relevanssi_pdf_content' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 549 |
|
| 550 |
+
if ( strpos( implode( ' ', $custom_fields ), '%' ) ) {
|
| 551 |
+
// ACF repeater fields involved.
|
| 552 |
+
$custom_fields_regexp = str_replace( '%', '.+', implode( '|', $custom_fields ) );
|
| 553 |
+
$keys = "AND m.meta_key REGEXP ('$custom_fields_regexp')";
|
| 554 |
+
} else {
|
| 555 |
+
$custom_fields_escaped = implode(
|
| 556 |
+
"','",
|
| 557 |
+
array_map(
|
| 558 |
+
'esc_sql',
|
| 559 |
+
$custom_fields
|
| 560 |
+
)
|
| 561 |
+
);
|
| 562 |
+
$keys = "AND m.meta_key IN ('$custom_fields_escaped')";
|
| 563 |
+
}
|
| 564 |
}
|
| 565 |
|
| 566 |
if ( 'visible' === $custom_fields ) {
|
| 2069 |
'/\[ai1ec.*?\]/im',
|
| 2070 |
'/\[eme_.*?\]/im',
|
| 2071 |
'/\[layerslider.*?\]/im',
|
| 2072 |
+
// Divi garbage.
|
| 2073 |
+
'/@ET-DC@.*?@/im',
|
| 2074 |
),
|
| 2075 |
$context
|
| 2076 |
);
|
lib/compatibility/woocommerce.php
CHANGED
|
@@ -12,6 +12,23 @@
|
|
| 12 |
|
| 13 |
add_filter( 'relevanssi_indexing_restriction', 'relevanssi_woocommerce_restriction' );
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
/**
|
| 16 |
* Applies the WooCommerce product visibility filter.
|
| 17 |
*
|
| 12 |
|
| 13 |
add_filter( 'relevanssi_indexing_restriction', 'relevanssi_woocommerce_restriction' );
|
| 14 |
|
| 15 |
+
/**
|
| 16 |
+
* This action solves the problems introduced by adjust_posts_count() in
|
| 17 |
+
* WooCommerce version 4.4.0.
|
| 18 |
+
*/
|
| 19 |
+
add_action( 'woocommerce_before_shop_loop', 'relevanssi_wc_reset_loop' );
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Resets the WC post loop in search queries.
|
| 23 |
+
*
|
| 24 |
+
* Hooks on to woocommerce_before_shop_loop.
|
| 25 |
+
*/
|
| 26 |
+
function relevanssi_wc_reset_loop() {
|
| 27 |
+
global $wp_query;
|
| 28 |
+
if ( $wp_query->is_search ) {
|
| 29 |
+
wc_reset_loop();
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
/**
|
| 33 |
* Applies the WooCommerce product visibility filter.
|
| 34 |
*
|
lib/excerpts-highlights.php
CHANGED
|
@@ -1208,7 +1208,10 @@ function relevanssi_get_custom_field_content( $post_id ) {
|
|
| 1208 |
array_walk_recursive(
|
| 1209 |
$value,
|
| 1210 |
function( $val ) use ( &$value_as_string ) {
|
| 1211 |
-
|
|
|
|
|
|
|
|
|
|
| 1212 |
}
|
| 1213 |
);
|
| 1214 |
$value = $value_as_string;
|
| 1208 |
array_walk_recursive(
|
| 1209 |
$value,
|
| 1210 |
function( $val ) use ( &$value_as_string ) {
|
| 1211 |
+
if ( is_string( $val ) ) {
|
| 1212 |
+
// Sometimes this can be something weird.
|
| 1213 |
+
$value_as_string .= ' ' . $val;
|
| 1214 |
+
}
|
| 1215 |
}
|
| 1216 |
);
|
| 1217 |
$value = $value_as_string;
|
lib/indexing.php
CHANGED
|
@@ -809,14 +809,18 @@ function relevanssi_publish( $post_id, $bypass_global_post = false ) {
|
|
| 809 |
* @param int $post_id The post ID.
|
| 810 |
*
|
| 811 |
* @return string|int Returns 'auto-draft' if the post is an auto draft and
|
| 812 |
-
* thus skipped, 'removed' if the post is removed or
|
| 813 |
-
* return value from relevanssi_publish().
|
| 814 |
*
|
| 815 |
* @see relevanssi_publish()
|
| 816 |
*/
|
| 817 |
function relevanssi_insert_edit( $post_id ) {
|
| 818 |
global $wpdb;
|
| 819 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 820 |
$post_status = get_post_status( $post_id );
|
| 821 |
if ( 'auto-draft' === $post_status ) {
|
| 822 |
return 'auto-draft';
|
|
@@ -859,7 +863,9 @@ function relevanssi_insert_edit( $post_id ) {
|
|
| 859 |
$bypass_global_post = true;
|
| 860 |
$return_value = relevanssi_publish( $post_id, $bypass_global_post );
|
| 861 |
|
| 862 |
-
|
|
|
|
|
|
|
| 863 |
} else {
|
| 864 |
// The post isn't supposed to be indexed anymore, remove it from index.
|
| 865 |
relevanssi_remove_doc( $post_id );
|
| 809 |
* @param int $post_id The post ID.
|
| 810 |
*
|
| 811 |
* @return string|int Returns 'auto-draft' if the post is an auto draft and
|
| 812 |
+
* thus skipped, 'revision' for revisions, 'removed' if the post is removed or
|
| 813 |
+
* the relevanssi_index_doc() return value from relevanssi_publish().
|
| 814 |
*
|
| 815 |
* @see relevanssi_publish()
|
| 816 |
*/
|
| 817 |
function relevanssi_insert_edit( $post_id ) {
|
| 818 |
global $wpdb;
|
| 819 |
|
| 820 |
+
if ( 'revision' === relevanssi_get_post_type( $post_id ) ) {
|
| 821 |
+
return 'revision';
|
| 822 |
+
}
|
| 823 |
+
|
| 824 |
$post_status = get_post_status( $post_id );
|
| 825 |
if ( 'auto-draft' === $post_status ) {
|
| 826 |
return 'auto-draft';
|
| 863 |
$bypass_global_post = true;
|
| 864 |
$return_value = relevanssi_publish( $post_id, $bypass_global_post );
|
| 865 |
|
| 866 |
+
if ( is_int( $return_value ) && $return_value > 0 ) {
|
| 867 |
+
relevanssi_async_update_doc_count();
|
| 868 |
+
}
|
| 869 |
} else {
|
| 870 |
// The post isn't supposed to be indexed anymore, remove it from index.
|
| 871 |
relevanssi_remove_doc( $post_id );
|
lib/log.php
CHANGED
|
@@ -57,6 +57,7 @@ function relevanssi_update_log( $query, $hits ) {
|
|
| 57 |
$user = apply_filters( 'relevanssi_log_get_user', wp_get_current_user() );
|
| 58 |
if ( 0 !== $user->ID && get_option( 'relevanssi_omit_from_logs' ) ) {
|
| 59 |
$omit = explode( ',', get_option( 'relevanssi_omit_from_logs' ) );
|
|
|
|
| 60 |
if ( in_array( strval( $user->ID ), $omit, true ) ) {
|
| 61 |
return;
|
| 62 |
}
|
| 57 |
$user = apply_filters( 'relevanssi_log_get_user', wp_get_current_user() );
|
| 58 |
if ( 0 !== $user->ID && get_option( 'relevanssi_omit_from_logs' ) ) {
|
| 59 |
$omit = explode( ',', get_option( 'relevanssi_omit_from_logs' ) );
|
| 60 |
+
array_walk( $omit, 'trim' );
|
| 61 |
if ( in_array( strval( $user->ID ), $omit, true ) ) {
|
| 62 |
return;
|
| 63 |
}
|
readme.txt
CHANGED
|
@@ -5,7 +5,7 @@ Tags: search, relevance, better search, product search, woocommerce search
|
|
| 5 |
Requires at least: 4.9
|
| 6 |
Tested up to: 5.5
|
| 7 |
Requires PHP: 7.0
|
| 8 |
-
Stable tag: 4.8.
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 11 |
|
|
@@ -133,6 +133,13 @@ Each document database is full of useless words. All the little words that appea
|
|
| 133 |
* John Calahan for extensive 4.0 beta testing.
|
| 134 |
|
| 135 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
= 4.8.0 =
|
| 137 |
* Changed behaviour: Relevanssi now requires PHP 7.
|
| 138 |
* Changed behaviour: Relevanssi now sorts strings with `strnatcasecmp()` instead of `strcasecmp()`, leading to a more natural results with strings that include numbers.
|
|
@@ -168,6 +175,9 @@ Each document database is full of useless words. All the little words that appea
|
|
| 168 |
* Minor fix: User Access Manager showed drafts in search results for all users. This is now fixed.
|
| 169 |
|
| 170 |
== Upgrade notice ==
|
|
|
|
|
|
|
|
|
|
| 171 |
= 4.8.0 =
|
| 172 |
* Fixes a major bug in comment indexing, if you include comments in the index rebuild the index after updating.
|
| 173 |
|
| 5 |
Requires at least: 4.9
|
| 6 |
Tested up to: 5.5
|
| 7 |
Requires PHP: 7.0
|
| 8 |
+
Stable tag: 4.8.1
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 11 |
|
| 133 |
* John Calahan for extensive 4.0 beta testing.
|
| 134 |
|
| 135 |
== Changelog ==
|
| 136 |
+
= 4.8.1 =
|
| 137 |
+
* Major fix: Changes in WooCommerce 4.4.0 broke the Relevanssi searches. This makes the WooCommerce search work again.
|
| 138 |
+
* Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). Now the extra spaces don't matter.
|
| 139 |
+
* Minor fix: The asynchronous doc count action in the previous version could cause an infinite loop with the Snitch logger plugin. This is prevented now: the async action doesn't run after indexing unless a post is actually indexed.
|
| 140 |
+
* Minor fix: Relevanssi indexing procedure was triggered for autosaved drafts, causing possible problems with the asynchronous doc count action.
|
| 141 |
+
* Minor fix: The `relevanssi_index_custom_fields` filter hook was not applied when doing phrase matching, thus phrases could not be found when they were in custom fields added with the filter.
|
| 142 |
+
|
| 143 |
= 4.8.0 =
|
| 144 |
* Changed behaviour: Relevanssi now requires PHP 7.
|
| 145 |
* Changed behaviour: Relevanssi now sorts strings with `strnatcasecmp()` instead of `strcasecmp()`, leading to a more natural results with strings that include numbers.
|
| 175 |
* Minor fix: User Access Manager showed drafts in search results for all users. This is now fixed.
|
| 176 |
|
| 177 |
== Upgrade notice ==
|
| 178 |
+
= 4.8.1 =
|
| 179 |
+
* WooCommerce 4.4 compatibility, other minor fixes.
|
| 180 |
+
|
| 181 |
= 4.8.0 =
|
| 182 |
* Fixes a major bug in comment indexing, if you include comments in the index rebuild the index after updating.
|
| 183 |
|
relevanssi.php
CHANGED
|
@@ -13,7 +13,7 @@
|
|
| 13 |
* Plugin Name: Relevanssi
|
| 14 |
* Plugin URI: https://www.relevanssi.com/
|
| 15 |
* Description: This plugin replaces WordPress search with a relevance-sorting search.
|
| 16 |
-
* Version: 4.8.
|
| 17 |
* Author: Mikko Saari
|
| 18 |
* Author URI: http://www.mikkosaari.fi/
|
| 19 |
* Text Domain: relevanssi
|
|
@@ -67,7 +67,7 @@ $relevanssi_variables['database_version'] = 5;
|
|
| 67 |
$relevanssi_variables['file'] = __FILE__;
|
| 68 |
$relevanssi_variables['plugin_dir'] = plugin_dir_path( __FILE__ );
|
| 69 |
$relevanssi_variables['plugin_basename'] = plugin_basename( __FILE__ );
|
| 70 |
-
$relevanssi_variables['plugin_version'] = '4.8.
|
| 71 |
|
| 72 |
require_once 'lib/admin-ajax.php';
|
| 73 |
require_once 'lib/common.php';
|
| 13 |
* Plugin Name: Relevanssi
|
| 14 |
* Plugin URI: https://www.relevanssi.com/
|
| 15 |
* Description: This plugin replaces WordPress search with a relevance-sorting search.
|
| 16 |
+
* Version: 4.8.1
|
| 17 |
* Author: Mikko Saari
|
| 18 |
* Author URI: http://www.mikkosaari.fi/
|
| 19 |
* Text Domain: relevanssi
|
| 67 |
$relevanssi_variables['file'] = __FILE__;
|
| 68 |
$relevanssi_variables['plugin_dir'] = plugin_dir_path( __FILE__ );
|
| 69 |
$relevanssi_variables['plugin_basename'] = plugin_basename( __FILE__ );
|
| 70 |
+
$relevanssi_variables['plugin_version'] = '4.8.1';
|
| 71 |
|
| 72 |
require_once 'lib/admin-ajax.php';
|
| 73 |
require_once 'lib/common.php';
|
