You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix exclusion term handling in search queries: strip prefix before sanitizing, separate negative clauses, and wrap positive expressions to prevent FULLTEXT bypass
- Check exclusion prefix BEFORE stripping operators so the prefix is still present
- Strip prefix before sanitizing term with preg_replace
- Skip empty terms after sanitization
- Collect negative clauses separately and append with AND to prevent FULLTEXT branch from bypassing exclusions
- Wrap positive expression before appending negations
Copy file name to clipboardExpand all lines: readme.txt
+20-4Lines changed: 20 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -128,34 +128,50 @@ You can report security bugs through the Patchstack Vulnerability Disclosure Pro
128
128
= 4.3.0 =
129
129
130
130
* Features:
131
+
* [Pro] New: WP-CLI support with comprehensive command-line interface (search, cache, db, stats, settings, tables, status, stopwords commands).
132
+
* [Pro] Dashboard chart drill-down: click any bar in the daily searches chart to view the popular searches for that day.
131
133
* [Pro] New InnoDB conversion tool: convert the custom table engine with automatic FULLTEXT index recreation.
132
134
* [Pro] Scheduled reconciliation cron: a twicedaily job automatically syncs any published posts missing from the custom search index table.
135
+
* [Pro] New exclusion options: Exclude Front page and Exclude Posts page settings to optionally remove these pages from search results.
136
+
* [Pro] Network dashboard with popular searches chart and statistics table for multisite networks, accessible from the network admin menu.
133
137
134
138
* Enhancements:
139
+
* [Pro] Multisite admin select-all checkboxes and post-copy URL cleanup are now handled by an external JavaScript file (via `wp_enqueue_script`) instead of inline `<script>` blocks — improves compatibility with strict Content Security Policies.
140
+
* [Pro] Copy-to-clipboard buttons on the tools and custom tables pages are now initialized automatically; no per-block inline script needed.
135
141
* [Pro] Improved short-term (≤3 character) LIKE searches to score full-word matches higher and order results by relevance.
136
142
* [Pro] Refactored fuzzy query shaping so `Query_Modifier` owns score construction and request shaping, with `Fuzzy_Search` acting as the fuzzy scoring service.
137
143
* [Pro] Rewrote soundex function, removed multisite LIMIT cap, and added content scoring for fuzzy search.
138
144
* [Pro] Added filters for fuzzy search truncation parameters.
139
145
* [Pro] Centralized exclusion term parsing logic in Helpers class.
146
+
* [Pro] Custom tables search now supports a FULLTEXT toggle, with improved LIKE-only relevance scoring when FULLTEXT is disabled.
147
+
* [Pro] Improved multisite search query composition: correctly unwraps fuzzy subqueries before UNION assembly and strips only top-level ORDER BY clauses, preventing malformed SQL.
148
+
* [Pro] LIKE term matching in custom tables search now uses an EXISTS subquery to avoid unbounded JOINs when the terms table is not already in scope.
149
+
* [Pro] Database check results are now cached within a request, reducing redundant `SHOW TABLES` queries on pages that check table status multiple times.
150
+
* [Pro] Dashboard popular searches query result is now cached within a request to avoid repeated database hits.
151
+
* Refactored Media Handler with a strategy-based thumbnail resolution chain; now also supports ACF Image fields (Image Array, Image ID, Image URL) and plain text URL fields.
140
152
* Hardened search sanitization and boolean mode validation for more consistent results.
141
153
* Escaped output in settings forms for improved security.
142
154
143
155
* Bug fixes:
156
+
* [Pro] Fixed localized admin script data keys: removed erroneous `.strings.` nesting that caused the cache-clear confirmation and error dialogs to display `undefined`.
157
+
* Fixed spinner alignment inside action buttons (now displays inline rather than floating).
144
158
* [Pro] Fixed fuzzy LIKE query SQL issues that could generate duplicate `ID` fields in wrapped sub-queries.
* [Pro] Fixed inconsistent indentation and table alias qualification in multisite query composition.
147
161
* [Pro] Disabled fuzzy search when boolean operators are present to prevent conflicts.
162
+
* Fixed duplicate search query being executed on every non-seamless search page load.
163
+
* Fixed relevance percentages on paginated search results by stabilizing topscore handling across pages, while reducing unnecessary topscore queries when minimum relevance filtering is not in use.
148
164
* Fixed placeholder attribute escaping in text field rendering.
149
165
150
166
151
167
= 4.2.4 =
152
168
153
169
* Features:
154
-
* Better Search form: The "any" post type option label can now be customised when the post type dropdown is enabled.
170
+
* Better Search form: The “any” post type option label can now be customised when the post type dropdown is enabled.
155
171
* Media Handler now detects featured images provided by the Featured Image from URL (FIFU) plugin.
156
172
157
173
* Fixed:
158
-
* Fixed an issue where selecting "any" post type would search through all post types instead of respecting the configured post types from settings.
174
+
* Fixed an issue where selecting “any” post type would search through all post types instead of respecting the configured post types from settings.
159
175
* [Pro] Custom table searches now include post slug matching when “Search post slug” is enabled.
160
176
* [Pro] Fixed SQL syntax error in multisite search queries when custom tables are disabled, caused by malformed GROUP BY clause stripping.
161
177
* Fixed improper stripping of boolean mode operators in LIKE clauses, ensuring consistent behavior between FULLTEXT and LIKE searches.
@@ -232,5 +248,5 @@ For previous changelog entries, please refer to the separate changelog.txt file
232
248
233
249
== Upgrade Notice ==
234
250
235
-
= 4.3.0 =
236
-
Fixes post type selection to respect configured settings when "any" is selected.
251
+
= 4.3.0 =
252
+
Adds WP-CLI support, dashboard chart drill-down, an InnoDB conversion tool, scheduled index reconciliation, and a network admin dashboard for multisite. Includes a fuzzy search refactor and a long list of stability fixes.
* During bulk updates, avoid re-injecting update data for the plugin itself once it has already been updated.
550
+
*
551
+
* If the custom package is re-added to the transient after the plugin update, WordPress may detect the package again and incorrectly report "The plugin is at the latest version" for a pending update, since the custom package version matches the currently installed version.
552
+
*
553
+
* Behavior differs depending on how the bulk update is triggered. Please refer to the inline comments for each flow below for details.
554
+
*/
555
+
if (
556
+
! empty( $wp_current_filter ) && (
557
+
/**
558
+
* update-core.php and other upgrader pages:
559
+
* The `upgrader_process_complete` action fires only once after all updates have finished. In this case, it is the current action (`$wp_current_filter[0]`), while `self::$_upgrade_basename` may contain any plugin basename.
* AJAX bulk updates (e.g., from the Plugins page):
564
+
* The `upgrader_process_complete` action fires multiple times — once for each plugin after it finishes updating. In this flow, it is not the current action (`$wp_current_filter[0]`) because it is triggered from another action. Instead, we compare `self::$_upgrade_basename` with the basename of the plugin currently being updated, since the `upgrader_process_complete` action runs separately for each plugin.
0 commit comments