= 4.5.0 = * New feature: New filter hook `relevanssi_disable_stopwords` can be used to disable stopwords completely. Just add a filter function that returns `true`. * Changed behaviour: Stopwords are no longer automatically restored if emptied. It's now possible to empty the stopword list. If you want to restore the stopwords from the file (or from the database, if you're upgrading from an earlier version of Relevanssi and find your stopwords missing), just click the button on the stopwords settings page that restores the stopwords. * Changed behaviour: Changes to post weights in the `relevanssi_results` hook did not affect the relevance scores shown in excerpts. That's changed now, and the displayed scores are now taken from the `$doc_weight` array, which is returned in the return value array from `relevanssi_search()`. * Changed behaviour: Excerpt length and type are now checked outside the loop that goes through the posts. This reduces the number of database calls required. * Minor fix: Searching for regex special characters (for example parentheses, brackets) caused problems in excerpts. * Minor fix: Improvements in handling highlighting for words with apostrophes. * Minor fix: Disregard hanging commas at the end of post exclusion settings. * Minor fix: Sometimes excerpts wouldn't have an ellipsis in the beginning even though they should. = 4.4.1 = * Major fix: Returns the missing stopwords. = 4.4.0 = * New feature: It's now possible to exclude image attachments from the index with a simple setting on the indexing settings page. * New feature: Page builder short codes are now removed in Relevanssi indexing. This should reduce the amount of garbage data indexed for posts in Divi, Avada and other page builder themes. * Changed behaviour: The `relevanssi_page_builder_shortcodes` filter hook is now applied both in indexing and excerpts, and has a second parameter that will inform you of the current context. * Minor fix: Stopwords weren't case insensitive like they should. They are now. Also, stopwords are no longer stored in the `wp_relevanssi_stopwords` database table, but are now stored in the `relevanssi_stopwords` option. * Minor fix: A comma at the end of the custom field indexing setting made Relevanssi index all custom fields. This doesn't happen anymore and trailing commas are automatically removed, too. * Minor fix: Accessibility improvements all around the admin interface. Screen reader support should be better, feel free to report any further ways to make this better. * Minor fix: Doing searches without search terms and with the throttle disabled could cause problems. Relevanssi now makes sure throttle is always on when doing termless searches. * Minor fix: Untokenized search terms are used for building excerpts, which makes highlighting in excerpts work better. * Minor fix: Indexing did not adjust the number of posts indexed at one go like it should. = 4.3.4 = * New feature: You can now give Gutenberg blocks a CSS class `relevanssi_noindex` to exclude them from being indexed. Relevanssi will not index Gutenberg blocks that have the class. * New feature: Relevanssi automatically skips some custom fields from common plugins that only contain unnecessary metadata. * New feature: The search results breakdown is added to the post objects and can be found in $post->relevanssi_hits. The data also includes new fields and the breakdown from the excerpt settings page can now show author, excerpt, custom field and MySQL column hits. * New feature: Relevanssi can now index Ninja Tables table content. This is something of an experimental feature right now, feedback is welcome. * New feature: New filter hook `relevanssi_indexing_query` filters the indexing query and is mostly interesting for debugging reasons. * Minor fix: Deleted and trashed comment contents were not deindexed when the comment was removed. That has been corrected now. * Minor fix: Phrase matching is now applied to attachments as well, including the attachments indexed for parent post. * Minor fix: Phrase matching only looks at custom fields that are indexed by Relevanssi. * Minor fix: Exact match bonus now uses the original query without synonyms added for the exact match check. * Minor fix: Paid Membership Pro filtering is only applied to published posts to prevent drafts from showing up in the search results. = 4.3.3 = * New feature: New filter hook `relevanssi_indexing_adjust` can be used to stop Relevanssi from adjusting the number of posts indexed at once during the indexing. * New feature: New filter hook `relevanssi_acf_field_value` filters ACF field values before they are indexed. * New feature: New filter hook `relevanssi_disabled_shortcodes` filters the array containing shortcodes that are disabled when indexing. * Removed feature: The `relevanssi_indexing_limit` option wasn't really used anymore, so it has been removed. * Changed behaviour: Indexing exclusions from Yoast SEO and SEOPress are applied in a different way in the indexing, making for a smoother indexing process. * Changed behaviour: WP Table Reloaded support has been removed; you really shouldn't be using WP Table Reloaded anymore. * Minor fix: Relevanssi won't choke on ACF fields with array or object values anymore. * Minor fix: Relevanssi uninstall process left couple of Relevanssi options in the database. * Minor fix: WPML language filter didn't work when `fields` was set to `ids` or `id=>parent`. = 4.3.2 = * New feature: SEOPress support, posts marked "noindex" in SEOPress are no longer indexed by Relevanssi by default. * Changed behaviour: Membership plugin compatibility is removed from `relevanssi_default_post_ok` function and has been moved to individual compatibility functions for each supported membership plugin. This makes it much easier to for example disable the membership plugin features if required. * Minor fix: The `searchform` shortcode now works better with different kinds of search forms. * Minor fix: Yoast SEO compatibility won't block indexing of posts with explicitly allowed indexing. * Minor fix: The `relevanssi_the_tags()` function printed out plain text, not HTML code like it should. The function now also accepts the post ID as a parameter. * Minor fix: Excerpt creation and highlighting have been improved a little. = 4.3.1.1 = * Remove notice about undefined index. = 4.3.1 = * Adding a missing file. = 4.3.0 = * New feature: Multi-phrase searches now respect AND and OR operators. If multiple phrases are included in an OR search, any posts with at least one phrase will be included. In AND search, all phrases must be included. * New feature: Admin search has been improved: there's a post type dropdown and the search is triggered when you press enter. The debug information has a `div` tag around it with the id `debugging`, so you can hide them with CSS if you want to. The numbering of results also makes more sense. * New feature: The date parameters (`year`, `monthnum`, `w`, `day`, `hour`, `minute`, `second`, `m`) are now supported. * New feature: New filter hook `relevanssi_indexing_limit` filters the default number of posts to index (10). If you have issues with indexing timing out, you can try adjusting this to a smaller number like 5 or 1. * New feature: Support for Paid Membership Pro added. * New feature: WordPress SEO support, posts marked "noindex" in WordPress SEO are no longer indexed by Relevanssi by default. * Removed feature: qTranslate is no longer supported. * Major fix: Tax query searching had some bugs in it, manifesting especially into Polylang not limiting the languages correctly. Some problems with the test suites were found and fixed, and similar problems won't happen again. * Minor fix: Admin search only shows editing options to users with enough capabilities to use them. * Minor fix: Phrase searching now uses filterable post statuses instead of a hard-coded set of post statuses. * Minor fix: The plugin action links were missing on the Plugins page list, they're back now. * Minor fix: Search terms with slashes won't cause errors anymore. * Minor fix: Relevanssi admin pages have been examined for accessibility and form labels have been improved in many places. * Deprecated: `relevanssi_get_term_taxonomy()` function is deprecated and will be removed at some point in the future. = 4.2.0 = * New feature: The search form shortcode has a new parameter `dropdown` which can be used to add a category dropdown, like this: `[searchform dropdown="category"]`. * New feature: Relevanssi can now use the contents of the PDF files indexed with WP File Download. * New filter: `relevanssi_indexing_tokens` can be used to filter the tokens (individual words) before they are indexed. * Removed filter: `relevanssi_default_meta_query_relation` did not have any effect anymore. * Changed behaviour: The default taxonomy relation was set to AND in 4.1.4, but wasn't properly applied before. Now it is really switched. * Changed behaviour: New post types have been added to list of forbidden post types Relevanssi won't show as indexing options (ACF, TablePress and WooCommerce). * Major fix: Tax query processing has been completely refactored, eliminating all sorts of bugs, especially with various edge cases. * Major fix: Gutenberg block indexing only worked with the Gutenberg plugin enabled. It now works with WP 5.0 built-in Gutenberg as well. If you use Gutenberg blocks, reindex to get all the block content in the index. * Major fix: Excerpt-building and highlighting did not respect the "Keyword matching" setting. They do now, and the excerpts should be better now. * Major fix: AND searches needed queries that could get too long for the database to handle. This has been fixed and optimized. * Major fix: Taxonomy term subquery relations didn't work; now they are applied. * Minor fix: iOS uses curly quotes by default, and that didn't work as a phrase operator. Now phrase operator works with curly quotes and straight quotes. * Minor fix: The Did you mean broke with search terms longer than 255 characters. * Minor fix: Phrases with numbers and one word like "team 17" didn't work, because numbers weren't counted as words. = 4.1.4 = * `EXISTS` and `NOT EXISTS` didn’t work for taxonomy terms in searches. * WPML post type handling has been improved. If post type allows fallback for default language, Relevanssi will support that. * Relevanssi now reminds you to set up automatic trimming for the logs. It’s a really good idea, otherwise the logs will become bloated, which will hurt search performance. * The Groups posts filter is only applied to public posts to avoid drafts being shown to people who shouldn’t see them. * The `posts_per_page` query variable didn’t work; it’s now added to the introduced query variables so that it works. * Relevanssi won’t log empty queries anymore. * The default tax query relation was switched from `OR` to `AND` to match the WP_Query default behaviour. * When used with WP 5.1, Relevanssi will now use `wp_insert_site` instead of the now-deprecated `wpmu_new_blog`. * Multisite blog creation is handled better in WP 5.1+. * Relevanssi now supports Restrict Content Pro permissions. = 4.1.3 = * Improvements to meta key sorting. * Relevanssi settings page won't let you exclude categories you have restricted the search to. * Members plugin compatibility has been improved: it's only used if the 'content permissions' feature has been enabled. * The excerpt settings page was a bit buggy. * Slimstat analytics is now added to the blocked shortcodes list. * New filter: `relevanssi_search_form` works exactly like `get_search_form`, but only applies to the Relevanssi shortcode search forms. * New JetPack taxonomies and post types have been added to the block list so they won't appear in Relevanssi settings. = 4.1.2 = * Choosing "CSS Style" for highlighting was not possible. That is now fixed. * Gutenberg reusable block indexing was fatally broken with the latest Gutenberg version. That has been updated. * Relevanssi now by default respects the WooCommerce "exclude from search" setting. * `post__not_in` still didn't work properly, it does now. * New filter: `relevanssi_comparison_order` can be used to define the sorting order when sorting the results by post type. * "Did you mean" process included a very slow query. It is now cached, leading in some cases to massive performance improvements (we're talking about several seconds here). * Highlights inside `code` and similar blocks are handled better now. = 4.1.1.2 = * Fixes the broken User searches page. = 4.1.1.1 = * Adding the missing Gutenberg compatibility file. = 4.1.1 = * Relevanssi can now index Gutenberg reusable blocks. (This functionality broke once already before release, so that can happen, since Gutenberg is still in very active development.) * The `post__in` and `post__not_in` parameters didn't work, and are now fixed. `post_parent__in` and `post_parent__not_in` are also improved. * You can use named meta queries for sorting posts. Meta query sorting is improved in other ways as well. * Log export didn't work properly. * Adding stopwords from the common word list has been fixed. * The `relevanssi_get_words_having` filter hook is now also applied to the free version Did you mean queries. * New filters: `relevanssi_1day` and `relevanssi_7days` can be used to adjust the number of days for log displays, so instead of 1, 7 and 30 days you can have anything you want. = 4.1.0.1 = * Actually working admin search. = 4.1 = * New feature: You can now export the search log as a CSV file. * New feature: Admin Search page allows you to perform searches in WP admin using Relevanssi. * New filter: `relevanssi_admin_search_capability` can be used to adjust who sees the admin search page. * New filter: `relevanssi_entities_inside_pre` and `relevanssi_entities_inside_code` adjust how HTML entities are handled inside `pre` and `code` tags. * Numeric meta values (`meta_value_num`) are now sorted as numbers and not strings. * Pinned posts have `$post->relevanssi_pinned` set to 1 for debugging purposes, but you can also use this for styling the posts in the search results templates. * The Did you mean feature has been toned down a bit, to make the suggestions slightly less weird in some cases. * Post parent parameters now accept 0 as a value, making it easier to search for children of any post or posts without a parent. * Polylang compatibility has been improved. * Phrases with apostrophes inside work better. * The `relevanssi_excerpt` filter hook got a second parameter that holds the post ID. * Custom field sorting actually works now. * WP Search Suggest compatibility added. = 4.0.11 = * Home page links were getting the highlight parameter even though they shouldn't. This has been fixed. * Added support for WP JV Post Reading Groups. * Improved handling of HTML entities. * Events Made Easy Calendar shortcodes are now removed when building excerpts. * `set_time_limit()` was removed from the indexing; it's no longer necessary, and it can break the indexing on sites that don't allow the use of the function. * `relevanssi_post_title_before_tokenize` filter was moved a bit so that it's the last thing that runs before tokenizing. * Disabled shortcodes are handled better in the indexing: the shortcode names won't be indexed anymore like they were before. * Made sure there won't be a warning for non-numeric values when searching. * New filter: `relevanssi_clean_excerpt` lets you remove unwanted highlights from excerpts. * Highlighting works better with `pre` and `code` tags. * New filter: `relevanssi_comment_author_to_index` lets you filter comment author names before indexing. * `relevanssi_comment_content_to_index` doesn't include the comment author name anymore. = 4.0.10.1 = * The privacy features caused an error notice with certain Relevanssi configurations, and the plugin required WP 4.9.6. = 4.0.10 = * Privacy: If you log search queries, Relevanssi will suggest some additional content to your privacy policy page. * Privacy: Relevanssi now supports the new Privacy Policy and Personal Data tools in WordPress 4.9.6. * Saving synonyms with quotes worked, but the synonyms showed up wrong. * Relevanssi could in some situations override navigation menu links with links to the user profiles or taxonomy terms found in the search. This update fixes that behaviour. * Random order works again; using orderby `rand` didn't work properly. The `rand(seed)` format is also supported now. * Fixed quotes and apostrophes in Did you mean suggestions. = 4.0.9 = * Fixes broken tag and category indexing and searching. If you use tags and categories, rebuild the index after updating. * Phrases were not highlighted correctly on documents. This is now fixed. * Shortcode fix: 'wp_show_posts' shouldn't cause problems anymore. * New filter: `relevanssi_indexing_restriction` allows filtering posts before indexing. * New WooCommerce product visibility filtering tool makes WooCommerce product indexing faster. * MemberPress post controls were loose and showed drafts to searchers. That is now fixed. * Highlighting was too loose, even if matching was set to whole words. * Highlighting now works better in cases where there's a hyphen or an apostrophe inside a word. = 4.0.8 = * Fixed cases where Relevanssi added an ellipsis even if the excerpt was from the start of the post. * Highlighting now works with numeric search strings. * Improved highlighting for accented words. Thanks to Paul Ryan. * A surplus comma at the end of post exclusion setting won't break the search anymore. * Fixed instructions for adjusting the throttle limit. = 4.0.7 = * Recent post bonus is now applied to searches. * Exact term setting can now be disabled. * Users of Members plugin would have drafts appear in search results. This is now fixed. = 4.0.6 = * Indexing bugs squashed. * Missing tag and category weight settings returned. * Fusion builder shortcodes are removed from excerpts. * MemberPress post control was backwards. * User searches page reset buttons fixed. * WPML language filter fix. = 4.0.4 = * Fixed shortcode: `searchform` shortcode didn't work properly. * Setting post type or post content weight to 0 didn't work. * Gravity Forms shortcode is now disabled in Relevanssi indexing. * New filter: `relevanssi_excerpt_query` filters the search query before building excerpts. * HTML tags are stripped from post excerpts when using the excerpt to build Relevanssi excerpts. * Fixed filter: `relevanssi_custom_field_value` didn't have the correct post ID parameter. * `relevanssi_get_permalink` doesn't add the `highlight` parameter to URLs outside search results pages anymore, and won't add the parameter to front page links either. * Relevanssi used `sanitize_hex_color`, which isn't actually reliably available. * Did you mean suggestions have been improved. * Single-word phrases are not allowed anymore, as they do no good. They are silently converted to non-phrases now. = 4.0.3 = * Relevanssi didn't index all posts with one go. It does now. * © and ® symbols caused problems in indexing; they are now included in the default punctuation removal. * In some cases excerpt-building could take ages because of autoembed link discovery. Relevanssi now blocks the autoembed procedure in link-building. * New filter: `relevanssi_custom_field_value` is used to filter custom field values both before indexing and before excerpt-building. Parameters include the field name and the post ID. * Updated filter: `relevanssi_index_custom_fields` now gets a second parameter that contains the post ID. = 4.0.2 = * Removed couple of error notices in the code. * Improved the support for page builders. * Improvements to the Polylang setting. = 4.0.1 = * The plugin can now be uninstalled. = 4.0 = * Legacy code has been removed. If you have a version older than 3.6, update first to 3.6.2.2 to guarantee smooth upgrade process. * Improved indexing: no more clicking "Continue indexing" again and again! * Settings pages have been completely rewritten. * There's documentation in the WordPress contextual help: just click Help on the top right corner. * Better Polylang support. A new option to remove the Polylang language filter. * Logs can be automatically trimmed. Old log entries are removed to save space. * Finally a setting to adjust content weight! * Excerpts can use the custom field content. * Highlighting in documents is changed: it now requires a `highlight` query parameter. This helps getting pass caching and makes the highlighting more reliable. To get the query parameter active, use `relevanssi_get_permalink()` to print out the permalinks on the search results templates. * Relevanssi added synonyms to highlighting even if synonyms were not used for searching. In some cases, synonyms were added twice. * The User Searches page got a makeover, too. * Relevanssi is automatically disabled in REST API searches. * Groups and Simple Membership support has been improved. * Sorting search results is now up to 300 times faster than before. * Lots of improvements all over the place. * New filter: `relevanssi_excerpt_custom_field_content` lets you modify custom field content that is used for excerpts. * New filter: `relevanssi_punctuation_filter` allows for easy modification of punctuation handling. * New filter: `relevanssi_default_punctuation_replacement` changes the default way to handle the rest of the punctuation. * New filter: `relevanssi_search_again` lets you run the search again if no results are found and to modify the parameters between search runs. * New filter: `relevanssi_fallback` allows you to do fallback searches. * New filter: `relevanssi_page_builder_shortcodes` lets you control which page builder shortcodes Relevanssi removes before building the excerpts. * New filter: `relevanssi_optimize_excerpts` makes excerpt-building faster, if you make the filter return `true`. = 3.6.2.2 = * A bug in post sorting broke string sorting (mostly post title sorting). = 3.6.2.1 = * A bug was left in the post ordering code. That bug is now squashed. = 3.6.2 = * Simple Membership plugin is now supported automatically to restrict access to posts. * Relevanssi can now handle orderby parameter in array format. * Relevanssi now blocks Easy Digital Downloads shortcodes when indexing to improve compatibility with EDD. * When using `fields` to only fetch post IDs, Relevanssi doesn't try to highlight post titles. * New action: `relevanssi_update_options` lets you adjust Relevanssi options immediately after the defaults are set. * Remove notices about duplicated database columns when installing the plugin. = 3.6.1 = * SECURITY: This version fixes a SQL injection vulnerability, where a site admin could theoretically inject SQL code into Relevanssi search queries. Doing this required access to Relevanssi settings page and in my tests, I couldn't do any damage, just break the Relevanssi search, but in any case, this vulnerability is now fixed. * Search and Filter shortcode is added to the blacklist. * Groups plugin is now supported automatically to restrict access to posts. * The filter `relevanssi_index_custom_fields` now works even if the custom field setting is empty. * The filter `relevanssi_post_to_index` now has a second parameter. For posts, it simply repeats the post object, but for taxonomy terms, it has the term object. = 3.6.0 = * Changed a bit how Relevanssi attaches itself to queries. Instead of the global $wp_query, Relevanssi now uses the query passed as the parameter to `the_posts` filter hook. This should improve compatibility in some cases, but may cause problems in some fringe cases. If you're doing something unusual with Relevanssi, try this out before deploying to public use. * Some meta queries caused major problems with the Relevanssi weighting algorithm. This has now been fixed. * Error notices caused by trying to use a non-existing taxonomy term have been removed. = 3.5.12 = * Post type exclusion didn't work as expected. * Relevanssi couldn't handle nested tax queries (such as those generated by WooCommerce product visibility filtering) properly. = 3.5.11.1 = * New filter: `relevanssi_allow_one_letter_highlights` lets you allow one-letter highlights. Just make the filter function return `true`. * New filter: `relevanssi_block_one_letter_searches` by default blocks one-letter searches. If you want to enable them, add a filter function that always returns `false`. * Fixed an undefined variable notice. = 3.5.11 = * Synonym indexing failed if synonyms contained a forward slash. * Highlighting HTML tags has been improved further. * New filter: `relevanssi_tag_before_tokenize` allows you to access tag content before indexing. * Relevanssi now actively blocks one-letter search terms, as they are generally pointless and can cause "out of memory" issues. One-letter search terms are no longer highlighted, either. These are usually caused by cases like "word's" being interpreted as "word s". * New filter: `relevanssi_disable_shortcodes_excerpt` lets you add more shortcodes to be disabled before excerpts are built. = 3.5.10 = * Some users got a fatal parse error. That shouldn't happen anymore. * FacetWP users ran into trouble, as `relevanssi_do_query()` started to explicitly expect a WP_Query object in version 1.15.0. That expectation is removed; it's still highly recommended for future compatibility that you use WP_Query objects. * Small bug fix: `get_current_screen()` is now only used when it's available to avoid occasional fatal errors. * Error messages from `DOING_AJAX` being undefined should be removed. = 3.5.9.1 = * WP.org plugin repo didn't like 3.5.9 for some reason, hoping to have better luck with this. = 3.5.9 = * Improved the way highlighting handles HTML tags, especially when highlighting on post pages. * The throttle limit setting was removed from the settings page for causing trouble. If you need to change it, update `relevanssi_throttle_limit` option directly. * Relevanssi didn't support tax_queries with `field` set to `name`. That works now. * Much faster way of showing the 25 most common words in the index. If you've disabled this feature because it was so slow, try enabling it - you might be surprised! = 3.5.8 = * Did you mean function had a XSS vulnerability, which is now removed. * Minimum word length wasn't applied to titles in indexing. It is now fixed. If you think this is a problem, rebuild the index. * TablePress compatibility has been improved. * Meta query handling has been improved, thanks to Maxime Culea. * Improved WP_Query parameter support: setting query variable `sentence` to 1 forces phrase search. * Improved ACF compatibility. = 3.5.7.1 = * Small fix for a bug that broke the settings page. = 3.5.7 = * An improved version of the sorting function will not throw notices when Intuitive Custom Post Order plugin is used. * New filter: `relevanssi_missing_sort_key` can be used to adjust the result sorting when using keys that are not present in all posts (eg. menu_order). * Czech translation and stopwords, thanks to Michael Kucera. * Relevanssi broke the WP admin menu search when admin searches were enabled. * Relevanssi broke the admin page search under WP 4.7. Relevanssi is now disabled in admin page searches. * The way accented characters are handled in highlighting is improved. A new filter, `relevanssi_accents_replacement_arrays`, can be used to adjust the accent replacement. = 3.5.6.1 = * Fix for a fatal bug in 3.5.6. = 3.5.6 = * Relevanssi admin page had a vulnerability that allowed SQL injection attacks. That is now fixed. * Relevanssi didn't like to highlight search terms that are followed by a ?, an ! or an apostrophe. * New filter: `relevanssi_ok_to_log` lets you control whether search queries are logged or not. = 3.5.5 = * 500 errors caused by arrays in custom fields should be gone now. * Improvements to the ACF "select" field support. * Relevanssi will not break when frontend plugins insert posts. * `relevanssi_match` filter has a new parameter, which contains the search term. * Polylang support has been improved. * WPML and Polylang filters work when "fields" is set to "ids". * New filter: `relevanssi_log_get_user` gets passed the user object before Relevanssi decides if the query should be logged or not. = 3.5.4 = * Relevanssi had a bug that lead to inflated relevancy scores for posts. * Relevanssi can now index the human-readable labels of ACF "select" fields. (Thanks to Raphaël Droz.) * New filter: `relevanssi_30days` can be used to adjust the 30 day logs to a different number of days. * Adding stopwords that contain apostrophes didn't work. * Ensured PHP7 and WP 4.6 compatibility. * Fixed a small glitch that could happen if a highlighted term is next to a starting square bracket. = 3.5.3 = * New filter `relevanssi_user_searches_limit` to adjust the number of user searches shown in the logs. * Old data check is only done on Relevanssi settings page, not on all admin pages. That should improve admin performance. * Fixed a fatal error when searching includes private posts. * New filter: `relevanssi_remote_addr` can be used to modify the IP address logged to Relevanssi logs. * Blocked CFDB and WooCommerce shortcodes that are causing problems with Relevanssi. = 3.5.2 = * Added correct support for `term_taxonomy_id` in the `fields` parameter in tax_queries. = 3.5.1 = * Fixed an error in the Did you mean function. * Fixed an error if the search term was not found in content. * Fixed an error when building excerpts from posts shorter than the excerpt length. * Blocked the `[starpro]` shortcode that was causing problems with Relevanssi. * New filter: `relevanssi_remove_stopwords_in_titles` allows you to include stopwords in titles. * Added support for `term_tax_id` in the `fields` parameter in tax_queries. * Excerpt-building failed if multibyte string operations were missing. It should work now. = 3.5 = * Tokenizer was using `strlen()` and not `mb_strlen()`, so word lengths were not calculated properly. If your site uses non-ASCII alphabet, rebuilding the index is a good idea. * Small improvement to WPML multilanguage filtering. * `relevanssi_the_title()` got a new parameter: if you don't want to echo the title, you can use it like `relevanssi_the_title(false)` to make it return the title. * Relevanssi had `the_title` filter hook calls that were missing the second parameter; that's now fixed. * The excerpt-building algorithm is completely rewritten based on work by Ben Boyter (http://www.boyter.org/). * The `[watupro]` shortcode didn't work with Relevanssi, so Relevanssi will now bypass it. * The plugin i18n features have been improved slightly. * New filter: `relevanssi_didyoumean_suggestion` lets you modify the Did you mean? suggestion before it's displayed. * `relevanssi_didyoumean()` has a new parameter: you can now choose whether the result is echoed out (the default value) or just returned. * In the search results breakdown, you can now use %categories% and %taxonomies% to show the number of matches in categories and taxonomies other than tags and cats, respectively. * Relevanssi supports `fields` parameter (both `ids` and `id=>parent`) to return only post IDs or post IDs and post parents. = 3.4.2 = * Empty lines on synonym settings caused problems. Fixed that. * In WordPress 4.2 installations, emoji in will be handled better. Emoji in posts may cause problems with WordPress versions below 4.2, so please update! = 3.4.1 = * Removed a notice about an undefined variable. = 3.4 = * New filter: `relevanssi_valid_admin_status` can be used to adjust post statuses that Relevanssi will handle. * If Relevanssi creates an empty excerpt for a post and there's a user-set excerpt for the post, that excerpt is used. * No ellipsis is added to the post excerpt, if the post excerpt shows the whole post. * The `relevanssi_post_title_before_tokenize` filter now has a second parameter that contains the post object. * New filter: `relevanssi_display_common_words` can be used to disable the "25 most common words" listing on the settings page, if it's too heavy to load. * Relevanssi was sanitizing taxonomy titles too aggressively. That is now toned down a bit. * Relevanssi now supports `post_parent`, `post_parent__in` and `post_parent__not_in`, though you have to set them in `relevanssi_modify_wp_query` filter for them to work. * Meta query support should now be perfect; there were some limitations with complicated meta queries before. = 3.3.8 = * Fixed a bug that caused the results to change depending of the order of words in a multi-word search query. * Added `product_categories` and `recent_products` from WooCommerce to the list of blocked shortcodes. * There are improvements in excerpt-building and highlighting, especially when fuzzy search is enabled. * Fixed a possible (if quite unlikely) XSS vulnerability. * Improved search performance (thanks to MikeNGarrett). * Sometimes highlights in documents make the document content disappear. I don't know why, but I've added a fix that should make the content visible (without the highlights) if a problem appears. = 3.3.7.1 = * Fixed bbPress compatibility. = 3.3.7 = * Fixed bbPress compatibility. = 3.3.6 = * Relevanssi handles taxonomy terms in search better. The change requires a reindexing. * Fix in indexing: Relevanssi will now bypass the global $post when indexing. This should help with problems with the Cookie Law Info plugin, for example. * Tax query relation setting didn't work properly. It is now fixed. * Word-based excerpt building sometimes created too short excerpts. That is now fixed. * Synonyms are now highlighted. * Phrase matching had issues where searching for a too common phrase crashed the search. That has been fixed. * LIKE operator didn't work properly in meta_queries. * Problems with Avatar Upload plugin are fixed. * Offset errors with mb_stripos() shouldn't happen anymore. * A small problem in taxonomy search MySQL fixed, also a small problem with AND operator in tax_queries. * New filter: `relevanssi_post_to_index` lets you access the post object before the post is indexed. * New filter: `relevanssi_orderby` lets you modify the $orderby value before Relevanssi sorts posts. * New filter: `relevanssi_order` lets you modify the $order value before Relevanssi sorts posts. * New filter: `relevanssi_post_title_before_tokenize` lets you modify post titles before indexing. * New filter: `relevanssi_private_cap` lets you adjust the capability setting for private posts in custom post types. * Deprecated use of `like_escape` has been fixed. = 3.3.5 = * Fixed a bug where excluding posts would cause the search to fail. * Fixed a bug causing duplicate search results in WPML searches. * Increased plugin safety against hackers. * There was a bug in `relevanssi_comment_content_to_index` filter. * Some people had problems with the log entry timestamps. Fixed that. * New filter: `relevanssi_prevent_default_request` gives you more control over where Relevanssi prevents the default query from running. * New filter: `relevanssi_private_cap` lets you set the correct capability for finding private posts in custom post types. * The option to exclude categories and tags from search only worked for categories, not tags. Tags have been separated to a different option. = 3.3.4 = * Couple of bug fixes. = 3.3.3 = * OR fallback had problems. * Indexing sub pages didn't work. * Relevanssi now automatically treats 'ß' as 'ss'. If your site has 'ß' in text, reindexing the database is a good idea. * Query variable `post_status` is now supported. = 3.3.2 = * Fixed a warning on search results page. = 3.3.1 = * Fixed bugs related to the removal of the cache feature. = 3.3 = * Improvements to excerpts: excerpts with phrases work much better now, and the excerpt creation logic has been improved: the excerpts are now better. The process takes a bit more time, though. * Allowing HTML tags in excerpts could lead to those tags being left open. Relevanssi will now try to close open HTML tags in excerpts. * Allowed tags were not controlled in comments. They are now. * Highlighting in documents didn't always work; it should be more reliable now. * Non-integer values are removed from `post__in` and `post__not_in` before processing them. * Query variables `p` and `page_id` are now supported. * Relevanssi now understands `date_query` variables as well. * The original post excerpt is stored in $post->original_excerpt. * Taxonomy search works better with term id parameters (for example from `wp_category_dropdown`). * Errors about $wpdb->prepare() missing an argument removed. * New functions: `relevanssi_the_title()` and `relevanssi_get_the_title()` can be used to display highlighted titles in search results. * The old title highlighting method has been disabled, because it caused highlights in wrong places. Now the highlighted title is stored in $post->highlighted_post_title, take it from there or use the Relevanssi title functions to display it. * Polylang and WPML support was adjusted to perform better in edge cases. * Indexing is faster, thanks to some improved code from Tom Novelli. * MySQL injection attack vulnerability removed. * The cache feature is now removed. Relevanssi should automatically drop the cache tables. * New filter: `relevanssi_indexing_data` lets you modify the data before it's indexed. = 3.2 = * Fixed a bug in the TablePress support. * Titles are put through the_title filter before indexing. * New filter: `relevanssi_join` can be used to join tables in the Relevanssi search MySQL queries. Thanks to Ninos Ego. * New filter: `relevanssi_post_content` can be used to modify post content before any Relevanssi processing. * New filter: `relevanssi_post_content_before_tokenize` can be used to modify post content just before it's tokenized. * New filter: `relevanssi_indexing_values` can be used to modify what Relevanssi stores in the index. * New filter: `relevanssi_default_meta_query_relation` can be used to change the default meta query relation (default value is "AND"). * When using a meta_query, `relation` can be set to OR now. * Phrases are now matched to excerpts. * Number of queries Relevanssi generates is much, much lower. * New filter: `relevanssi_didyoumean_url` lets you modify the URL generated by the did you mean feature. * Better set of Russian stopwords. * Relevanssi now highlights search query synonyms as well in documents. = 3.1.9 = * Fix to make Relevanssi compatible with WordPress 3.7. * Fixed a mistyped database table name. * Relevanssi disables responsive-flipbook shortcode in indexing; it was causing problems. * Fixed a problem with an author dropdown with no author selected. = 3.1.8 = * Category restriction and exclusion and couple of other category-related settings didn't work properly. * Support for Polylang broke the support for WPML. That is now fixed. * One deprecated `$wpdb->escape()` was still left; it's gone now. * Shortcode `layerslider` was causing problems with Relevanssi; Relevanssi now disables it before building excerpts. * Relevanssi won't break BBPress search anymore. * If Relevanssi Premium is installed, deleting Relevanssi will not remove the databases and the options. = 3.1.7 = * New filter: `relevanssi_comment_content_to_index` lets you modify comment content before it's indexed by Relevanssi (to index comment meta, for example). * Facetious support: if post_type is set to -1, Relevanssi will not hang up on it. * Numerical search terms work better now. * Excerpt-building had issues, which are now fixed. * Punctuation removal now replaces   with a space. * "starrater" short code from GD Star Rating is now disabled in indexing. * Punctuation removal now replaces invisible spaces with a normal space. * Division by zero error caused by 0 in posts_per_page is now prevented, and -1 value for posts_per_page handled better. * Relevanssi doesn't apply `get_the_excerpt` filters to excerpts it builds any more. * New filter: `relevanssi_excerpt` lets you modify the excerpts Relevanssi creates. * Relevanssi now suspends WP post cache while indexing, making indexing a lot more efficient. Thanks to Julien Mession for this one. * Deprecated function errors in 3.6 removed. * When search included user profiles or taxonomy terms, Relevanssi would generate lots of MySQL errors. Not anymore. * New filter: `relevanssi_valid_status` lets you modify the post statuses Relevanssi indexes. * New filter: `relevanssi_index_taxonomies_args` lets you modify the arguments passed to get_terms() when indexing taxonomies (for example to set 'hide_empty' to false). * Searching by taxonomy ID could confuse two taxonomies with the same term_id. The search is now checking the taxonomy as well to see it's correct. * Basic support for Polylang plugin. * Russian and Italian stopwords are now included, thanks to Flector and Valerio Vendrame. * Small fix in the way user meta fields are handled. = 3.1.6 = * DEACTIVATE AND ACTIVATE THE PLUGIN AFTER YOU UPDATE. * Fuzzy searches are now a lot more efficient; they were a huge resource hog before. * Fixed a possible MySQL injection attack. * Fixed MySQL errors from empty meta queries. * Sort order (orderby and order variables) are now read from query variables instead of global variables. * Relevanssi will not choke on bad values of orderby anymore. * Limit searches is improved: when using AND search it is less likely to miss results. * Phrase recognition read the whole post content (which it didn't need) from database, causing memory issues in some cases. Fixed that. * Highlighting was broken, and should work much better now. = 3.1.5 = * OR fallback didn't actually fall back to OR, but instead got stuck in an endless loop of AND searches. * Meta queries didn't work without a key; now they work with just meta_value or meta_value_num. * Meta queries had problems with meta_value being set to null. * Relevanssi now supports category__and. By default this sets include_children to false. * When querying by slug, the term taxonomy is also taken into consideration, fixing problems when same slug appears in different taxonomies. * Author search didn't work. * Fixed an error message caused by all-number synonyms starting with zero, like 02. * Synonyms are now case-insensitive. * New filter: `relevanssi_default_tax_query_relation` can be used to change the default tax query relation from OR to AND. * Fixed undefined variable errors when doing an OR fallback. * New filter: `relevanssi_bots_to_not_log` makes it possible to block bots from logs. The format matches what other plugins, ie. WP-Useronline, use for bot blocking, so you can share block lists. * New filter: `relevanssi_admin_search_ok` gives you more control when Relevanssi overrides the default WP search in admin, useful for fixing P2P_Box AJAX search. * Ordering search results by title or date in admin search works now. * Modified the way the highlights work; now highlighting words with apostrophes should produce more meaningful results. * Highlighting should not highlight anything between & and ; or in