Version Description
- New feature: Adds support for Avada Live Search.
- New feature: Adds support for Fibo Search.
- Minor fix: Elementor library searches are not broken anymore when Relevanssi is enabled in admin.
- Minor fix: Relevanssi now understands array-style post_type[] parameters.
- Minor fix: Relevanssi now automatically considers the Turkish '' the same as 'i'.
Download this release
Release Info
Developer | msaari |
Plugin | Relevanssi – A Better Search |
Version | 4.13.2 |
Comparing to | |
See all releases |
Code changes from version 4.13.1 to 4.13.2
- lib/common.php +54 -15
- lib/compatibility/avada.php +19 -0
- lib/compatibility/elementor.php +28 -0
- lib/compatibility/fibosearch.php +27 -0
- lib/indexing.php +7 -5
- lib/init.php +5 -2
- lib/log.php +2 -13
- lib/search.php +24 -6
- lib/utils.php +1 -0
- readme.txt +12 -2
- relevanssi.php +2 -2
lib/common.php
CHANGED
@@ -366,6 +366,7 @@ function relevanssi_remove_punct( $a ) {
|
|
366 |
|
367 |
$replacement_array = array(
|
368 |
'ß' => 'ss',
|
|
|
369 |
'₂' => '2',
|
370 |
'·' => '',
|
371 |
'…' => '',
|
@@ -966,20 +967,7 @@ function relevanssi_add_highlight( $permalink, $link_post = null ) {
|
|
966 |
$highlight_docs = get_option( 'relevanssi_highlight_docs', 'off' );
|
967 |
$query = get_search_query();
|
968 |
if ( isset( $highlight_docs ) && 'off' !== $highlight_docs && ! empty( $query ) ) {
|
969 |
-
|
970 |
-
// We won't add the highlight parameter for the front page, as that will break the link.
|
971 |
-
$front_page = false;
|
972 |
-
if ( is_object( $link_post ) ) {
|
973 |
-
if ( $link_post->ID === $frontpage_id ) {
|
974 |
-
$front_page = true;
|
975 |
-
}
|
976 |
-
} else {
|
977 |
-
global $post;
|
978 |
-
if ( is_object( $post ) && $post->ID === $frontpage_id ) {
|
979 |
-
$front_page = true;
|
980 |
-
}
|
981 |
-
}
|
982 |
-
if ( ! $front_page ) {
|
983 |
$query = str_replace( '"', '"', $query );
|
984 |
$permalink = esc_attr( add_query_arg( array( 'highlight' => rawurlencode( $query ) ), $permalink ) );
|
985 |
}
|
@@ -987,6 +975,31 @@ function relevanssi_add_highlight( $permalink, $link_post = null ) {
|
|
987 |
return $permalink;
|
988 |
}
|
989 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
990 |
/**
|
991 |
* Adjusts the permalink to use the Relevanssi-generated link.
|
992 |
*
|
@@ -1016,9 +1029,10 @@ function relevanssi_permalink( $link, $link_post = null ) {
|
|
1016 |
$link = $link_post->relevanssi_link;
|
1017 |
}
|
1018 |
|
1019 |
-
if ( is_search() && property_exists( $link_post, 'relevance_score' ) ) {
|
1020 |
$link = relevanssi_add_highlight( $link, $link_post );
|
1021 |
}
|
|
|
1022 |
return $link;
|
1023 |
}
|
1024 |
|
@@ -1705,3 +1719,28 @@ function relevanssi_replace_stems_in_terms( array $terms, array $all_terms = nul
|
|
1705 |
)
|
1706 |
);
|
1707 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
|
367 |
$replacement_array = array(
|
368 |
'ß' => 'ss',
|
369 |
+
'ı' => 'i',
|
370 |
'₂' => '2',
|
371 |
'·' => '',
|
372 |
'…' => '',
|
967 |
$highlight_docs = get_option( 'relevanssi_highlight_docs', 'off' );
|
968 |
$query = get_search_query();
|
969 |
if ( isset( $highlight_docs ) && 'off' !== $highlight_docs && ! empty( $query ) ) {
|
970 |
+
if ( ! relevanssi_is_front_page_id( isset( $link_post->ID ) ?? null ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
971 |
$query = str_replace( '"', '"', $query );
|
972 |
$permalink = esc_attr( add_query_arg( array( 'highlight' => rawurlencode( $query ) ), $permalink ) );
|
973 |
}
|
975 |
return $permalink;
|
976 |
}
|
977 |
|
978 |
+
/**
|
979 |
+
* Checks if a post ID is the front page ID.
|
980 |
+
*
|
981 |
+
* Gets the front page ID from the `page_on_front` option and checks the given
|
982 |
+
* ID against that.
|
983 |
+
*
|
984 |
+
* @param integer $post_id The post ID to check. If null, checks the global
|
985 |
+
* $post ID. Default null.
|
986 |
+
* @return boolean True if the post ID or global $post matches the front page.
|
987 |
+
*/
|
988 |
+
function relevanssi_is_front_page_id( int $post_id = null ) : bool {
|
989 |
+
$frontpage_id = intval( get_option( 'page_on_front' ) );
|
990 |
+
if ( $post_id === $frontpage_id ) {
|
991 |
+
return true;
|
992 |
+
} elseif ( isset( $post_id ) ) {
|
993 |
+
return false;
|
994 |
+
}
|
995 |
+
|
996 |
+
global $post;
|
997 |
+
if ( is_object( $post ) && $post->ID === $frontpage_id ) {
|
998 |
+
return true;
|
999 |
+
}
|
1000 |
+
return false;
|
1001 |
+
}
|
1002 |
+
|
1003 |
/**
|
1004 |
* Adjusts the permalink to use the Relevanssi-generated link.
|
1005 |
*
|
1029 |
$link = $link_post->relevanssi_link;
|
1030 |
}
|
1031 |
|
1032 |
+
if ( is_search() && is_object( $link_post ) && property_exists( $link_post, 'relevance_score' ) ) {
|
1033 |
$link = relevanssi_add_highlight( $link, $link_post );
|
1034 |
}
|
1035 |
+
|
1036 |
return $link;
|
1037 |
}
|
1038 |
|
1719 |
)
|
1720 |
);
|
1721 |
}
|
1722 |
+
|
1723 |
+
/**
|
1724 |
+
* Returns an array of bot user agents for Relevanssi to block.
|
1725 |
+
*
|
1726 |
+
* The bot user agent is the value and a human-readable name (not used for
|
1727 |
+
* anything) is in the index. This same list is used for different contexts,
|
1728 |
+
* and there are separate filters for modifying the list in various contexts.
|
1729 |
+
*
|
1730 |
+
* @return array An array of name => user-agent pairs.
|
1731 |
+
*/
|
1732 |
+
function relevanssi_bot_block_list() : array {
|
1733 |
+
$bots = array(
|
1734 |
+
'Google Mediapartners' => 'Mediapartners-Google',
|
1735 |
+
'GoogleBot' => 'Googlebot',
|
1736 |
+
'Bing' => 'Bingbot',
|
1737 |
+
'Yahoo' => 'Slurp',
|
1738 |
+
'DuckDuckGo' => 'DuckDuckBot',
|
1739 |
+
'Baidu' => 'Baiduspider',
|
1740 |
+
'Yandex' => 'YandexBot',
|
1741 |
+
'Sogou' => 'Sogou',
|
1742 |
+
'Exalead' => 'Exabot',
|
1743 |
+
'Majestic' => 'MJ12Bot',
|
1744 |
+
);
|
1745 |
+
return $bots;
|
1746 |
+
}
|
lib/compatibility/avada.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* /lib/compatibility/avada.php
|
4 |
+
*
|
5 |
+
* Avada theme compatibility features.
|
6 |
+
*
|
7 |
+
* @package Relevanssi
|
8 |
+
* @author Mikko Saari
|
9 |
+
* @license https://wordpress.org/about/gpl/ GNU General Public License
|
10 |
+
* @see https://www.relevanssi.com/
|
11 |
+
*/
|
12 |
+
|
13 |
+
add_filter(
|
14 |
+
'fusion_live_search_query_args',
|
15 |
+
function( $args ) {
|
16 |
+
$args['relevanssi'] = true;
|
17 |
+
return $args;
|
18 |
+
}
|
19 |
+
);
|
lib/compatibility/elementor.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* /lib/compatibility/elementor.php
|
4 |
+
*
|
5 |
+
* Elementor page builder compatibility features.
|
6 |
+
*
|
7 |
+
* @package Relevanssi
|
8 |
+
* @author Mikko Saari
|
9 |
+
* @license https://wordpress.org/about/gpl/ GNU General Public License
|
10 |
+
* @see https://www.relevanssi.com/
|
11 |
+
*/
|
12 |
+
|
13 |
+
add_filter( 'relevanssi_search_ok', 'relevanssi_block_elementor_library', 10, 2 );
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Blocks Relevanssi from interfering with the Elementor Library searches.
|
17 |
+
*
|
18 |
+
* @param bool $ok Should Relevanssi be allowed to process the query.
|
19 |
+
* @param WP_Query $query The WP_Query object.
|
20 |
+
*
|
21 |
+
* @return bool Returns false, if this is an Elementor library search.
|
22 |
+
*/
|
23 |
+
function relevanssi_block_elementor_library( bool $ok, WP_Query $query ) : bool {
|
24 |
+
if ( 'elementor_library' === $query->query_vars['post_type'] ) {
|
25 |
+
$ok = false;
|
26 |
+
}
|
27 |
+
return $ok;
|
28 |
+
}
|
lib/compatibility/fibosearch.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* /lib/compatibility/fibosearch.php
|
4 |
+
*
|
5 |
+
* Fibo Search compatibility features.
|
6 |
+
*
|
7 |
+
* @package Relevanssi
|
8 |
+
* @author Mikko Saari
|
9 |
+
* @license https://wordpress.org/about/gpl/ GNU General Public License
|
10 |
+
* @see https://www.relevanssi.com/
|
11 |
+
*/
|
12 |
+
|
13 |
+
add_filter( 'dgwt/wcas/search_query/args', 'relevanssi_enable_relevanssi_in_fibo' );
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Adds the 'relevanssi' parameter to the Fibo Search.
|
17 |
+
*
|
18 |
+
* Uses the dgwt/wcas/search_query_args filter hook to modify the search query.
|
19 |
+
*
|
20 |
+
* @params array $args The search arguments.
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
function relevanssi_enable_relevanssi_in_fibo( $args ) {
|
25 |
+
$args['relevanssi'] = true;
|
26 |
+
return $args;
|
27 |
+
}
|
lib/indexing.php
CHANGED
@@ -578,7 +578,7 @@ function relevanssi_index_doc( $index_post, $remove_first = false, $custom_field
|
|
578 |
|
579 |
if ( ! empty( $values ) ) {
|
580 |
$values = implode( ', ', $values );
|
581 |
-
$query = "INSERT IGNORE INTO $relevanssi_table (doc, term, term_reverse, content, title, comment, tag, link, author, category, excerpt, taxonomy, customfield, type, taxonomy_detail, customfield_detail, mysqlcolumn) VALUES $values";
|
582 |
if ( $debug ) {
|
583 |
relevanssi_debug_echo( "Final indexing query:\n\t$query" );
|
584 |
}
|
@@ -1047,7 +1047,7 @@ function relevanssi_remove_doc( $post_id, $keep_internal_links = false ) {
|
|
1047 |
return;
|
1048 |
}
|
1049 |
|
1050 |
-
$
|
1051 |
$wpdb->prepare(
|
1052 |
'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . ' WHERE doc=%d', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
|
1053 |
$post_id
|
@@ -1287,7 +1287,7 @@ function relevanssi_index_custom_fields( &$insert_data, $post_id, $custom_fields
|
|
1287 |
$context = 'custom_field';
|
1288 |
$remove_stops = true;
|
1289 |
if ( '_relevanssi_pdf_content' === $field ) {
|
1290 |
-
$context = '
|
1291 |
$remove_stops = 'body';
|
1292 |
}
|
1293 |
|
@@ -1672,6 +1672,7 @@ function relevanssi_convert_data_to_values( $insert_data, $post ) {
|
|
1672 |
$mysqlcolumn = isset( $data['mysqlcolumn'] ) ? $data['mysqlcolumn'] : 0;
|
1673 |
$taxonomy_detail = isset( $data['taxonomy_detail'] ) ? $data['taxonomy_detail'] : '';
|
1674 |
$customfield_detail = isset( $data['customfield_detail'] ) ? $data['customfield_detail'] : '';
|
|
|
1675 |
|
1676 |
if ( 'utf8' === $charset ) {
|
1677 |
$term = wp_encode_emoji( $term );
|
@@ -1680,7 +1681,7 @@ function relevanssi_convert_data_to_values( $insert_data, $post ) {
|
|
1680 |
$term = trim( $term );
|
1681 |
|
1682 |
$value = $wpdb->prepare(
|
1683 |
-
'(%d, %s, REVERSE(%s), %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %s, %s, %d)',
|
1684 |
$post->ID,
|
1685 |
$term,
|
1686 |
$term,
|
@@ -1697,7 +1698,8 @@ function relevanssi_convert_data_to_values( $insert_data, $post ) {
|
|
1697 |
$type,
|
1698 |
$taxonomy_detail,
|
1699 |
$customfield_detail,
|
1700 |
-
$mysqlcolumn
|
|
|
1701 |
);
|
1702 |
|
1703 |
array_push( $values, $value );
|
578 |
|
579 |
if ( ! empty( $values ) ) {
|
580 |
$values = implode( ', ', $values );
|
581 |
+
$query = "INSERT IGNORE INTO $relevanssi_table (doc, term, term_reverse, content, title, comment, tag, link, author, category, excerpt, taxonomy, customfield, type, taxonomy_detail, customfield_detail, mysqlcolumn, mysqlcolumn_detail) VALUES $values";
|
582 |
if ( $debug ) {
|
583 |
relevanssi_debug_echo( "Final indexing query:\n\t$query" );
|
584 |
}
|
1047 |
return;
|
1048 |
}
|
1049 |
|
1050 |
+
$wpdb->query(
|
1051 |
$wpdb->prepare(
|
1052 |
'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . ' WHERE doc=%d', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
|
1053 |
$post_id
|
1287 |
$context = 'custom_field';
|
1288 |
$remove_stops = true;
|
1289 |
if ( '_relevanssi_pdf_content' === $field ) {
|
1290 |
+
$context = 'content';
|
1291 |
$remove_stops = 'body';
|
1292 |
}
|
1293 |
|
1672 |
$mysqlcolumn = isset( $data['mysqlcolumn'] ) ? $data['mysqlcolumn'] : 0;
|
1673 |
$taxonomy_detail = isset( $data['taxonomy_detail'] ) ? $data['taxonomy_detail'] : '';
|
1674 |
$customfield_detail = isset( $data['customfield_detail'] ) ? $data['customfield_detail'] : '';
|
1675 |
+
$mysqlcolumn_detail = isset( $data['mysqlcolumn_detail'] ) ? $data['mysqlcolumn_detail'] : '';
|
1676 |
|
1677 |
if ( 'utf8' === $charset ) {
|
1678 |
$term = wp_encode_emoji( $term );
|
1681 |
$term = trim( $term );
|
1682 |
|
1683 |
$value = $wpdb->prepare(
|
1684 |
+
'(%d, %s, REVERSE(%s), %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %s, %s, %d, %s)',
|
1685 |
$post->ID,
|
1686 |
$term,
|
1687 |
$term,
|
1698 |
$type,
|
1699 |
$taxonomy_detail,
|
1700 |
$customfield_detail,
|
1701 |
+
$mysqlcolumn,
|
1702 |
+
$mysqlcolumn_detail
|
1703 |
);
|
1704 |
|
1705 |
array_push( $values, $value );
|
lib/init.php
CHANGED
@@ -308,8 +308,8 @@ function relevanssi_create_database_tables( $relevanssi_db_version ) {
|
|
308 |
customfield mediumint(9) NOT NULL DEFAULT '0',
|
309 |
mysqlcolumn mediumint(9) NOT NULL DEFAULT '0',
|
310 |
taxonomy_detail longtext NOT NULL,
|
311 |
-
customfield_detail longtext NOT NULL,
|
312 |
-
mysqlcolumn_detail longtext NOT NULL,
|
313 |
type varchar(210) NOT NULL DEFAULT 'post',
|
314 |
item bigint(20) NOT NULL DEFAULT '0',
|
315 |
PRIMARY KEY doctermitem (doc, term, item)) $charset_collate";
|
@@ -468,13 +468,16 @@ function relevanssi_export_log_check() {
|
|
468 |
*/
|
469 |
function relevanssi_load_compatibility_code() {
|
470 |
class_exists( 'acf', false ) && require_once 'compatibility/acf.php';
|
|
|
471 |
class_exists( 'MeprUpdateCtrl', false ) && MeprUpdateCtrl::is_activated() && require_once 'compatibility/memberpress.php';
|
472 |
class_exists( 'Obenland_Wp_Search_Suggest', false ) && require_once 'compatibility/wp-search-suggest.php';
|
473 |
class_exists( 'Polylang', false ) && require_once 'compatibility/polylang.php';
|
474 |
class_exists( 'RankMath', false ) && require_once 'compatibility/rankmath.php';
|
475 |
class_exists( 'WooCommerce', false ) && require_once 'compatibility/woocommerce.php';
|
476 |
defined( 'AIOSEO_DIR' ) && require_once 'compatibility/aioseo.php';
|
|
|
477 |
defined( 'CT_VERSION' ) && require_once 'compatibility/oxygen.php';
|
|
|
478 |
defined( 'GROUPS_CORE_VERSION' ) && require_once 'compatibility/groups.php';
|
479 |
defined( 'NINJA_TABLES_VERSION' ) && require_once 'compatibility/ninjatables.php';
|
480 |
defined( 'PRLI_PLUGIN_NAME' ) && require_once 'compatibility/pretty-links.php';
|
308 |
customfield mediumint(9) NOT NULL DEFAULT '0',
|
309 |
mysqlcolumn mediumint(9) NOT NULL DEFAULT '0',
|
310 |
taxonomy_detail longtext NOT NULL,
|
311 |
+
customfield_detail longtext NOT NULL DEFAULT '',
|
312 |
+
mysqlcolumn_detail longtext NOT NULL DEFAULT '',
|
313 |
type varchar(210) NOT NULL DEFAULT 'post',
|
314 |
item bigint(20) NOT NULL DEFAULT '0',
|
315 |
PRIMARY KEY doctermitem (doc, term, item)) $charset_collate";
|
468 |
*/
|
469 |
function relevanssi_load_compatibility_code() {
|
470 |
class_exists( 'acf', false ) && require_once 'compatibility/acf.php';
|
471 |
+
class_exists( 'DGWT_WC_Ajax_Search', false ) && require_once 'compatibility/fibosearch.php';
|
472 |
class_exists( 'MeprUpdateCtrl', false ) && MeprUpdateCtrl::is_activated() && require_once 'compatibility/memberpress.php';
|
473 |
class_exists( 'Obenland_Wp_Search_Suggest', false ) && require_once 'compatibility/wp-search-suggest.php';
|
474 |
class_exists( 'Polylang', false ) && require_once 'compatibility/polylang.php';
|
475 |
class_exists( 'RankMath', false ) && require_once 'compatibility/rankmath.php';
|
476 |
class_exists( 'WooCommerce', false ) && require_once 'compatibility/woocommerce.php';
|
477 |
defined( 'AIOSEO_DIR' ) && require_once 'compatibility/aioseo.php';
|
478 |
+
defined( 'AVADA_VERSION' ) && require_once 'compatibility/avada.php';
|
479 |
defined( 'CT_VERSION' ) && require_once 'compatibility/oxygen.php';
|
480 |
+
defined( 'ELEMENTOR_VERSION' ) && require_once 'compatibility/elementor.php';
|
481 |
defined( 'GROUPS_CORE_VERSION' ) && require_once 'compatibility/groups.php';
|
482 |
defined( 'NINJA_TABLES_VERSION' ) && require_once 'compatibility/ninjatables.php';
|
483 |
defined( 'PRLI_PLUGIN_NAME' ) && require_once 'compatibility/pretty-links.php';
|
lib/log.php
CHANGED
@@ -31,17 +31,6 @@ function relevanssi_update_log( $query, $hits ) {
|
|
31 |
$user_agent = '';
|
32 |
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
|
33 |
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
34 |
-
$bots = array(
|
35 |
-
'Google 1' => 'Mediapartners-Google',
|
36 |
-
'Google 2' => 'Googlebot',
|
37 |
-
'Bing' => 'Bingbot',
|
38 |
-
'Yahoo' => 'Slurp',
|
39 |
-
'DuckDuckGo' => 'DuckDuckBot',
|
40 |
-
'Baidu' => 'Baiduspider',
|
41 |
-
'Yandex' => 'YandexBot',
|
42 |
-
'Sogou' => 'Sogou',
|
43 |
-
'Exalead' => 'Exabot',
|
44 |
-
);
|
45 |
|
46 |
/**
|
47 |
* Filters the bots Relevanssi should block from logs.
|
@@ -50,7 +39,7 @@ function relevanssi_update_log( $query, $hits ) {
|
|
50 |
*
|
51 |
* @param array $bots An array of bot user agents.
|
52 |
*/
|
53 |
-
$bots = apply_filters( 'relevanssi_bots_to_not_log',
|
54 |
foreach ( array_values( $bots ) as $lookfor ) {
|
55 |
if ( false !== stristr( $user_agent, $lookfor ) ) {
|
56 |
return false;
|
@@ -64,7 +53,7 @@ function relevanssi_update_log( $query, $hits ) {
|
|
64 |
* The current user is checked before logging a query to omit particular users.
|
65 |
* You can use this filter to filter out the user.
|
66 |
*
|
67 |
-
* @param
|
68 |
*/
|
69 |
$user = apply_filters( 'relevanssi_log_get_user', wp_get_current_user() );
|
70 |
if ( 0 !== $user->ID && get_option( 'relevanssi_omit_from_logs' ) ) {
|
31 |
$user_agent = '';
|
32 |
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
|
33 |
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
|
35 |
/**
|
36 |
* Filters the bots Relevanssi should block from logs.
|
39 |
*
|
40 |
* @param array $bots An array of bot user agents.
|
41 |
*/
|
42 |
+
$bots = apply_filters( 'relevanssi_bots_to_not_log', relevanssi_bot_block_list() );
|
43 |
foreach ( array_values( $bots ) as $lookfor ) {
|
44 |
if ( false !== stristr( $user_agent, $lookfor ) ) {
|
45 |
return false;
|
53 |
* The current user is checked before logging a query to omit particular users.
|
54 |
* You can use this filter to filter out the user.
|
55 |
*
|
56 |
+
* @param WP_User The current user object.
|
57 |
*/
|
58 |
$user = apply_filters( 'relevanssi_log_get_user', wp_get_current_user() );
|
59 |
if ( 0 !== $user->ID && get_option( 'relevanssi_omit_from_logs' ) ) {
|
lib/search.php
CHANGED
@@ -170,6 +170,9 @@ function relevanssi_search( $args ) {
|
|
170 |
* @param string The MySQL code that restricts the query.
|
171 |
*/
|
172 |
$query_restrictions = apply_filters( 'relevanssi_where', $query_restrictions );
|
|
|
|
|
|
|
173 |
|
174 |
/**
|
175 |
* Filters the meta query JOIN for the Relevanssi search query.
|
@@ -1416,10 +1419,10 @@ function relevanssi_update_term_hits( &$term_hits, &$match_arrays, $match, $term
|
|
1416 |
* Increases a value. If it's not set, sets it first to the default value.
|
1417 |
*
|
1418 |
* @param int $value The value to increase (passed by reference).
|
1419 |
-
* @param int $increase The amount to increase the value.
|
1420 |
* @param int $default The default value, default 0.
|
1421 |
*/
|
1422 |
-
function relevanssi_increase_value( &$value, $increase, $default = 0 ) {
|
1423 |
if ( ! isset( $value ) ) {
|
1424 |
$value = $default;
|
1425 |
}
|
@@ -1597,13 +1600,13 @@ function relevanssi_adjust_match_doc( $match ) {
|
|
1597 |
* @param string $term The search term.
|
1598 |
* @param bool $search_again If true, this is a repeat search (partial matching).
|
1599 |
* @param bool $no_terms If true, no search term is used.
|
1600 |
-
* @param string $query_join The MySQL JOIN clause.
|
1601 |
-
* @param string $query_restrictions The MySQL query restrictions.
|
1602 |
*
|
1603 |
* @return string The MySQL search query.
|
1604 |
*/
|
1605 |
function relevanssi_generate_search_query( string $term, bool $search_again,
|
1606 |
-
bool $no_terms, string $query_join, string $query_restrictions ) : string {
|
1607 |
global $relevanssi_variables;
|
1608 |
$relevanssi_table = $relevanssi_variables['relevanssi_table'];
|
1609 |
|
@@ -1673,6 +1676,9 @@ function relevanssi_compile_common_args( $query ) {
|
|
1673 |
$date_query = relevanssi_wp_date_query_from_query_vars( $query );
|
1674 |
|
1675 |
$post_type = false;
|
|
|
|
|
|
|
1676 |
if ( isset( $query->query_vars['post_type'] ) && 'any' !== $query->query_vars['post_type'] ) {
|
1677 |
$post_type = $query->query_vars['post_type'];
|
1678 |
}
|
@@ -1700,7 +1706,19 @@ function relevanssi_compile_common_args( $query ) {
|
|
1700 |
);
|
1701 |
}
|
1702 |
|
1703 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1704 |
if ( count( $include['posts'] ) < 1 && count( $include['items'] ) < 1 ) {
|
1705 |
return;
|
1706 |
}
|
170 |
* @param string The MySQL code that restricts the query.
|
171 |
*/
|
172 |
$query_restrictions = apply_filters( 'relevanssi_where', $query_restrictions );
|
173 |
+
if ( ! $query_restrictions ) {
|
174 |
+
$query_restrictions = '';
|
175 |
+
}
|
176 |
|
177 |
/**
|
178 |
* Filters the meta query JOIN for the Relevanssi search query.
|
1419 |
* Increases a value. If it's not set, sets it first to the default value.
|
1420 |
*
|
1421 |
* @param int $value The value to increase (passed by reference).
|
1422 |
+
* @param int $increase The amount to increase the value, default 1.
|
1423 |
* @param int $default The default value, default 0.
|
1424 |
*/
|
1425 |
+
function relevanssi_increase_value( &$value, $increase = 1, $default = 0 ) {
|
1426 |
if ( ! isset( $value ) ) {
|
1427 |
$value = $default;
|
1428 |
}
|
1600 |
* @param string $term The search term.
|
1601 |
* @param bool $search_again If true, this is a repeat search (partial matching).
|
1602 |
* @param bool $no_terms If true, no search term is used.
|
1603 |
+
* @param string $query_join The MySQL JOIN clause, default empty string.
|
1604 |
+
* @param string $query_restrictions The MySQL query restrictions, default empty string.
|
1605 |
*
|
1606 |
* @return string The MySQL search query.
|
1607 |
*/
|
1608 |
function relevanssi_generate_search_query( string $term, bool $search_again,
|
1609 |
+
bool $no_terms, string $query_join = '', string $query_restrictions = '' ) : string {
|
1610 |
global $relevanssi_variables;
|
1611 |
$relevanssi_table = $relevanssi_variables['relevanssi_table'];
|
1612 |
|
1676 |
$date_query = relevanssi_wp_date_query_from_query_vars( $query );
|
1677 |
|
1678 |
$post_type = false;
|
1679 |
+
if ( isset( $query->query_vars['post_type'] ) && is_array( $query->query_vars['post_type'] ) ) {
|
1680 |
+
$query->query_vars['post_type'] = implode( ',', $query->query_vars['post_type'] );
|
1681 |
+
}
|
1682 |
if ( isset( $query->query_vars['post_type'] ) && 'any' !== $query->query_vars['post_type'] ) {
|
1683 |
$post_type = $query->query_vars['post_type'];
|
1684 |
}
|
1706 |
);
|
1707 |
}
|
1708 |
|
1709 |
+
/**
|
1710 |
+
* Adds posts to the matches list from the other term queries.
|
1711 |
+
*
|
1712 |
+
* Without this functionality, AND searches would not return all posts. If a
|
1713 |
+
* post appears within the best results for one word, but not for another word
|
1714 |
+
* even though the word appears in the post (because of throttling), the post
|
1715 |
+
* would be excluded. This functionality makes sure it is included.
|
1716 |
+
*
|
1717 |
+
* @param array $matches The found posts array.
|
1718 |
+
* @param array $include The posts to include.
|
1719 |
+
* @param array $params Search parameters.
|
1720 |
+
*/
|
1721 |
+
function relevanssi_add_include_matches( array &$matches, array $include, array $params ) {
|
1722 |
if ( count( $include['posts'] ) < 1 && count( $include['items'] ) < 1 ) {
|
1723 |
return;
|
1724 |
}
|
lib/utils.php
CHANGED
@@ -347,6 +347,7 @@ function relevanssi_get_permalink() {
|
|
347 |
* @param string The permalink, generated by get_permalink().
|
348 |
*/
|
349 |
$permalink = apply_filters( 'relevanssi_permalink', get_permalink() );
|
|
|
350 |
return $permalink;
|
351 |
}
|
352 |
|
347 |
* @param string The permalink, generated by get_permalink().
|
348 |
*/
|
349 |
$permalink = apply_filters( 'relevanssi_permalink', get_permalink() );
|
350 |
+
|
351 |
return $permalink;
|
352 |
}
|
353 |
|
readme.txt
CHANGED
@@ -3,9 +3,9 @@ Contributors: msaari
|
|
3 |
Donate link: https://www.relevanssi.com/buy-premium/
|
4 |
Tags: search, relevance, better search, product search, woocommerce search
|
5 |
Requires at least: 4.9
|
6 |
-
Tested up to: 5.7.
|
7 |
Requires PHP: 7.0
|
8 |
-
Stable tag: 4.13.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -131,6 +131,13 @@ Each document database is full of useless words. All the little words that appea
|
|
131 |
* John Calahan for extensive 4.0 beta testing.
|
132 |
|
133 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
= 4.13.1 =
|
135 |
* New feature: Adds compatibility for WP-Members plugin, preventing blocked posts from showing up in the search results.
|
136 |
* New feature: New function `relevanssi_get_attachment_suffix()` can be used to return the attachment file suffix based on a post object or a post ID.
|
@@ -226,6 +233,9 @@ Each document database is full of useless words. All the little words that appea
|
|
226 |
* Minor fix: Improved Oxygen Builder support makes sure `ct_builder_shortcodes` custom field is always indexed.
|
227 |
|
228 |
== Upgrade notice ==
|
|
|
|
|
|
|
229 |
= 4.13.1 =
|
230 |
* Compatibility for WP-Members added.
|
231 |
|
3 |
Donate link: https://www.relevanssi.com/buy-premium/
|
4 |
Tags: search, relevance, better search, product search, woocommerce search
|
5 |
Requires at least: 4.9
|
6 |
+
Tested up to: 5.7.2
|
7 |
Requires PHP: 7.0
|
8 |
+
Stable tag: 4.13.2
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
131 |
* John Calahan for extensive 4.0 beta testing.
|
132 |
|
133 |
== Changelog ==
|
134 |
+
= 4.13.2 =
|
135 |
+
* New feature: Adds support for Avada Live Search.
|
136 |
+
* New feature: Adds support for Fibo Search.
|
137 |
+
* Minor fix: Elementor library searches are not broken anymore when Relevanssi is enabled in admin.
|
138 |
+
* Minor fix: Relevanssi now understands array-style post_type[] parameters.
|
139 |
+
* Minor fix: Relevanssi now automatically considers the Turkish 'ı' the same as 'i'.
|
140 |
+
|
141 |
= 4.13.1 =
|
142 |
* New feature: Adds compatibility for WP-Members plugin, preventing blocked posts from showing up in the search results.
|
143 |
* New feature: New function `relevanssi_get_attachment_suffix()` can be used to return the attachment file suffix based on a post object or a post ID.
|
233 |
* Minor fix: Improved Oxygen Builder support makes sure `ct_builder_shortcodes` custom field is always indexed.
|
234 |
|
235 |
== Upgrade notice ==
|
236 |
+
= 4.13.2 =
|
237 |
+
* Small bug and compatibility fixes.
|
238 |
+
|
239 |
= 4.13.1 =
|
240 |
* Compatibility for WP-Members added.
|
241 |
|
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.13.
|
17 |
* Author: Mikko Saari
|
18 |
* Author URI: http://www.mikkosaari.fi/
|
19 |
* Text Domain: relevanssi
|
@@ -67,7 +67,7 @@ $relevanssi_variables['database_version'] = 6;
|
|
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.13.
|
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.13.2
|
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.13.2';
|
71 |
|
72 |
require_once 'lib/admin-ajax.php';
|
73 |
require_once 'lib/common.php';
|