WP Manifestindependent plugin directory
manifest / content / search-essentials

Search Essentials

Makes site search find what is already there: taxonomy terms, custom fields such as the WooCommerce SKU, and variation codes. Adds relevance ordering and a live report on what the database itself already handles.

by George Vasiliades · github.com/poseidonas/search-essentials · website

0stars
1release downloads
0forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/poseidonas/search-essentials/releases/download/v1.0.0/search-essentials.zip

Declares an update source (https://github.com/Poseidonas/search-essentials), so updates arrive through the plugin's own updater.

Readme

Search Essentials

Latest release WordPress 6.7+ PHP 8.0+ License GPL-2.0-or-later

Makes site search find what is already there: taxonomy terms, custom fields such as the WooCommerce SKU, and variation codes. Adds relevance ordering and a live report on what the database itself already handles.

What it does

WordPress searches three columns and nothing else: post_title, post_excerpt and post_content. Everything else a site holds is invisible to it. A customer who types the product code printed on the invoice gets no results. Somebody who types a category name gets no results. A variation code finds nothing at all, because variations are not searchable posts.

This plugin widens the existing search instead of replacing it. No index is built, no table is added, no content is duplicated, and the WordPress search query keeps working the way it always did, including the -word exclusion syntax and quoted phrases. The extra lookups are EXISTS subqueries, so a post is never returned twice and no GROUP BY is needed.

What this plugin deliberately does not do

Accents, letter case and the Greek final sigma are handled by the database collation, not by WordPress. On utf8mb4_unicode_520_ci, utf8mb4_general_ci, utf8mb4_unicode_ci, utf8mb4_0900_ai_ci, utf8mb4_uca1400_ai_ci and the older utf8mb3_general_ci, searching for αγορα already finds αγορά, καλος already finds Καλός, and cafe already finds café. Adding a plugin layer for that would be pretending to solve a solved problem.

It only breaks on binary or case sensitive collations such as utf8mb4_bin, where nothing matches at all, and on latin1 tables, where Greek cannot even be stored. The correct fix there is converting the tables, which no plugin can do safely on your behalf.

The settings page therefore runs the checks against your own database and tells you the result, instead of selling you a fix you do not need. See "What the database already handles" below.

Settings

Settings > Search.

Where the search looks

Setting Effect Default
Taxonomy terms A post is returned when the name or the slug of one of its assigned terms matches. Only terms assigned directly to the post are considered, not parent terms category and post_tag, plus product_cat and product_tag when WooCommerce is active at activation
Custom fields One meta key per line. Only the listed keys are read, so the subquery stays on the indexed meta_key column empty, or _sku when WooCommerce is active at activation
WooCommerce variation codes Returns the parent product when the _sku of one of its product_variation children matches On

The taxonomy and custom field lists are seeded once, when the plugin is activated. Installing WooCommerce later does not change them; tick the extra taxonomies and add _sku on the settings page.

How terms are matched

Setting Effect Default
Match Latin letters against Greek text Lets agora find αγορά. Applies only to terms of three characters or more written entirely in A-Z or a-z Off
Minimum length of a search term Searches shorter than this return no results instead of the whole archive. 0 switches the check off, the maximum is 20 0

The Latin to Greek matching builds a regular expression from the term. Each Latin letter becomes a character class holding the letter itself and its Greek equivalents with every accent and case variant, and these digraphs are recognised first: th and ch and kh and ps and ks, ou, ai, ei, oi, au and av and af, eu and ev and ef, mp, nt, gk, gg, ts, tz. A digraph is matched either as its Greek sequence or as the two Latin letters, so kafes finds καφές and agora finds both agora and αγορά. The result is approximate on purpose: it widens the set of results, it never narrows it. Because it uses REGEXP rather than LIKE, it costs more than the other options, which is why it is off by default.

What comes back

Setting Effect Default
Content types in the results Applies to the main search query only. Leave everything unticked to keep the WordPress behaviour, which is every public content type that is not excluded from search empty, meaning no restriction
Order results by relevance A title that starts with the term scores 8, a title that contains it scores 4, an excerpt that contains it scores 2, and the scores of every non excluded term are added together. Ties keep the WordPress order, which is newest first On

What the database already handles

The settings page reads the collation of the posts table and runs five comparisons through it: Greek without accents, the Greek final sigma, Greek upper and lower case, Latin without accents, and German umlauts. Each one is reported as handled, not handled, or not checkable. The verdict below the table states plainly whether anything is needed.

Where the changes apply

  • The search clause and the ordering apply to every front end search query, whether it is the main query, a search block or a custom WP_Query.
  • The content type restriction and the minimum length check apply to the main query only, because they change what a page as a whole returns.
  • Nothing at all is applied in the admin area.
  • The icxcnika_search_applies filter receives true and the WP_Query instance and can switch the whole thing off for a specific query.

Filters

  • icxcnika_search_settings - all settings before they are applied.
  • icxcnika_search_applies - whether to act on a given query. Receives a boolean and the WP_Query.
  • icxcnika_search_digraphs - the Latin digraph to Greek sequence map.
  • icxcnika_search_letters - the Latin letter to Greek letter map.
  • icxcnika_search_variants - the accent and case variants of each Greek letter.
  • icxcnika_search_registry_payload - data sent to the installation registry.

Data stored

  • Option icxcnika_search_settings (the settings).
  • Option icxcnika_search_registry_key (random installation key of 48 characters, created only if installation reporting is active).
  • Transient icxcnika_search_release (cached GitHub release lookup, 12 hours).
  • Cron event icxcnika_search_registry_ping (weekly, only if installation reporting is active).

No table is created, no post is modified and no index is maintained.

Installation reporting

On activation, on deactivation and once a week the plugin sends a small JSON message to the author's installation registry: plugin slug, plugin version, home URL, site URL, WordPress version, WooCommerce version if present, PHP version, locale and whether the site is a multisite. Each report carries a random installation key generated locally on first use. No content, no user data and no personal data are sent. The reporting address is empty by default, which means nothing is sent at all. The settings page states this explicitly. Add define( 'ICXCNIKA_REGISTRY_DISABLE', true ); to wp-config.php to turn the reporting off, or define( 'ICXCNIKA_REGISTRY_URL', '...' ); to point it elsewhere.

Updates

Updates are delivered from GitHub Releases of this repository. WordPress shows them on the Plugins screen like any other update, together with the details view and the automatic updates link.

Uninstall

Deleting the plugin removes the options, the transient and the cron event. Search returns to the WordPress behaviour immediately, because nothing was ever stored outside those options.


Search Essentials (Ελληνικά)

Κάνει την αναζήτηση του site να βρίσκει όσα ήδη υπάρχουν: όρους ταξινομιών, custom fields όπως το SKU του WooCommerce, και κωδικούς παραλλαγών. Προσθέτει κατάταξη κατά συνάφεια και ζωντανή αναφορά για το τι χειρίζεται ήδη η ίδια η βάση.

  • Δημιουργός: George Vasiliades - https://github.com/Poseidonas
  • Άδεια: GPL-2.0-or-later
  • Απαιτεί WordPress 6.7+ και PHP 8.0+

Τι κάνει

Το WordPress ψάχνει τρεις στήλες και τίποτα άλλο: post_title, post_excerpt και post_content. Οτιδήποτε άλλο κρατά το site είναι αόρατο. Ένας πελάτης που πληκτρολογεί τον κωδικό προϊόντος από το τιμολόγιο δεν παίρνει αποτελέσματα. Όποιος πληκτρολογεί όνομα κατηγορίας δεν παίρνει αποτελέσματα. Ένας κωδικός παραλλαγής δεν βρίσκει απολύτως τίποτα, επειδή οι παραλλαγές δεν είναι αναζητήσιμα άρθρα.

Αυτό το πρόσθετο διευρύνει την υπάρχουσα αναζήτηση αντί να την αντικαταστήσει. Δεν χτίζεται ευρετήριο, δεν προστίθεται πίνακας, δεν αντιγράφεται περιεχόμενο, και το ερώτημα αναζήτησης του WordPress συνεχίζει να λειτουργεί όπως πάντα, μαζί με τη σύνταξη αποκλεισμού -λέξη και τις φράσεις σε εισαγωγικά. Οι επιπλέον αναζητήσεις είναι υποερωτήματα EXISTS, οπότε ένα άρθρο δεν επιστρέφεται ποτέ δύο φορές και δεν χρειάζεται GROUP BY.

Τι δεν κάνει σκόπιμα

Οι τόνοι, τα κεφαλαία και πεζά και το ελληνικό τελικό σίγμα καλύπτονται από την collation της βάσης, όχι από το WordPress. Σε utf8mb4_unicode_520_ci, utf8mb4_general_ci, utf8mb4_unicode_ci, utf8mb4_0900_ai_ci, utf8mb4_uca1400_ai_ci και στην παλαιότερη utf8mb3_general_ci, η αναζήτηση αγορα βρίσκει ήδη το αγορά, το καλος βρίσκει ήδη το Καλός, και το cafe βρίσκει ήδη το café. Η προσθήκη επιπέδου πρόσθετου γι' αυτό θα ήταν προσποίηση λύσης σε λυμένο πρόβλημα.

Σπάει μόνο σε δυαδικές ή case sensitive collations όπως η utf8mb4_bin, όπου δεν ταιριάζει τίποτα, και σε πίνακες latin1, όπου τα Ελληνικά δεν μπορούν καν να αποθηκευτούν. Η σωστή λύση εκεί είναι η μετατροπή των πινάκων, κάτι που κανένα πρόσθετο δεν μπορεί να κάνει με ασφάλεια εκ μέρους σας.

Γι' αυτό η σελίδα ρυθμίσεων τρέχει τους ελέγχους πάνω στη δική σας βάση και σας λέει το αποτέλεσμα, αντί να σας πουλήσει λύση που δεν χρειάζεστε.

Ρυθμίσεις

Ρυθμίσεις > Αναζήτηση.

Πού ψάχνει η αναζήτηση

Ρύθμιση Ενέργεια Προεπιλογή
Όροι ταξινομιών Ένα άρθρο επιστρέφεται όταν ταιριάζει το όνομα ή το slug ενός από τους όρους που του έχουν ανατεθεί. Λαμβάνονται υπόψη μόνο οι όροι που έχουν ανατεθεί απευθείας, όχι οι γονικοί category και post_tag, συν product_cat και product_tag όταν το WooCommerce είναι ενεργό κατά την ενεργοποίηση
Custom fields Ένα meta key ανά γραμμή. Διαβάζονται μόνο τα καταχωρημένα κλειδιά, ώστε το υποερώτημα να μένει στην ευρετηριασμένη στήλη meta_key κενό, ή _sku όταν το WooCommerce είναι ενεργό κατά την ενεργοποίηση
Κωδικοί παραλλαγών WooCommerce Επιστρέφει το γονικό προϊόν όταν ταιριάζει το _sku μιας από τις θυγατρικές product_variation Ενεργό

Οι λίστες ταξινομιών και custom fields συμπληρώνονται μία φορά, κατά την ενεργοποίηση του πρόσθετου. Η μεταγενέστερη εγκατάσταση του WooCommerce δεν τις αλλάζει: μαρκάρετε τις επιπλέον ταξινομίες και προσθέστε το _sku από τη σελίδα ρυθμίσεων.

Πώς ταιριάζουν οι όροι

Ρύθμιση Ενέργεια Προεπιλογή
Αντιστοίχιση λατινικών γραμμάτων με ελληνικό κείμενο Επιτρέπει στο agora να βρει το αγορά. Ισχύει μόνο για όρους τριών χαρακτήρων ή περισσότερων, γραμμένους αποκλειστικά με A-Z ή a-z Ανενεργό
Ελάχιστο μήκος όρου αναζήτησης Αναζητήσεις μικρότερες από αυτό επιστρέφουν κανένα αποτέλεσμα αντί για ολόκληρο το αρχείο. Το 0 απενεργοποιεί τον έλεγχο, το μέγιστο είναι 20 0

Η αντιστοίχιση λατινικών με ελληνικά χτίζει κανονική έκφραση από τον όρο. Κάθε λατινικό γράμμα γίνεται κλάση χαρακτήρων που περιέχει το ίδιο το γράμμα και τα ελληνικά αντίστοιχά του με όλες τις παραλλαγές τόνου και πεζών ή κεφαλαίων, και αναγνωρίζονται πρώτα οι εξής δίγραφοι: th και ch και kh και ps και ks, ou, ai, ei, oi, au και av και af, eu και ev και ef, mp, nt, gk, gg, ts, tz. Ένας δίγραφος ταιριάζει είτε ως ελληνική ακολουθία είτε ως τα δύο λατινικά γράμματα, οπότε το kafes βρίσκει το καφές και το agora βρίσκει και το agora και το αγορά. Το αποτέλεσμα είναι προσεγγιστικό εσκεμμένα: διευρύνει το σύνολο των αποτελεσμάτων, ποτέ δεν το στενεύει. Επειδή χρησιμοποιεί REGEXP και όχι LIKE, κοστίζει περισσότερο από τις υπόλοιπες επιλογές, γι' αυτό είναι ανενεργό από προεπιλογή.

Τι επιστρέφεται

Ρύθμιση Ενέργεια Προεπιλογή
Τύποι περιεχομένου στα αποτελέσματα Ισχύει μόνο για το κύριο ερώτημα αναζήτησης. Αφήστε τα πάντα ξεμαρκαρισμένα για να διατηρηθεί η συμπεριφορά του WordPress, δηλαδή κάθε δημόσιος τύπος περιεχομένου που δεν εξαιρείται από την αναζήτηση κενό, δηλαδή κανένας περιορισμός
Κατάταξη αποτελεσμάτων κατά συνάφεια Τίτλος που ξεκινά με τον όρο βαθμολογείται με 8, τίτλος που τον περιέχει με 4, απόσπασμα που τον περιέχει με 2, και οι βαθμοί κάθε μη αποκλεισμένου όρου αθροίζονται. Οι ισοβαθμίες διατηρούν τη σειρά του WordPress, δηλαδή νεότερα πρώτα Ενεργό

Τι χειρίζεται ήδη η βάση δεδομένων

Η σελίδα ρυθμίσεων διαβάζει την collation του πίνακα άρθρων και τρέχει πέντε συγκρίσεις μέσα από αυτήν: Ελληνικά χωρίς τόνους, ελληνικό τελικό σίγμα, ελληνικά κεφαλαία και πεζά, Λατινικά χωρίς τόνους, και γερμανικά umlauts. Κάθε έλεγχος αναφέρεται ως καλυμμένος, μη καλυμμένος, ή μη ελέγξιμος. Το συμπέρασμα κάτω από τον πίνακα δηλώνει ξεκάθαρα αν χρειάζεται κάτι.

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
v1.0.0 Aug 18, 2026 search-essentials.zip 1