{"id":366605,"date":"2026-09-16T10:11:18","date_gmt":"2026-09-16T10:11:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kody-search\/"},"modified":"2026-09-16T10:10:43","modified_gmt":"2026-09-16T10:10:43","slug":"kody-search","status":"publish","type":"plugin","link":"https:\/\/fr-be.wordpress.org\/plugins\/kody-search\/","author":23557081,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0","stable_tag":"1.0","tested":"7.1.1","requires":"6.3","requires_php":"8.0","requires_plugins":null,"header_name":"Kody Search","header_author":"Kody, Matic Parker","header_description":"Instant dropdown search for posts and pages. Results appear as you type, with no page reload.","assets_banners_color":"fbfefe","last_updated":"2026-09-16 10:10:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/kody.si\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"maticparker","date":"2026-09-16 10:10:43","revision":3698335}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3698335,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3698335,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3698335,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3698335,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"kody-search\/search-page":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kody-search\/search-page","version":"1.0","title":"Kody Search Page","description":"Full-page search results view with pagination. Place on a dedicated search results page.","category":"widgets","icon":"search","keywords":["search","results","kody"],"textdomain":"kody-search","attributes":{"placeholder":{"type":"string","default":""},"postTypes":{"type":"array","items":{"type":"string"},"default":[]}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/index.js"},"kody-search\/search-form":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kody-search\/search-form","version":"1.0","title":"Kody Search","description":"Instant search for your site content. Inherits all styles from the active theme, so no configuration is needed.","category":"widgets","icon":"search","keywords":["search","instant","kody"],"textdomain":"kody-search","attributes":{"placeholder":{"type":"string","default":""},"postTypes":{"type":"array","items":{"type":"string"},"default":[]}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/index.js"}},"tagged_versions":["1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3698335,"resolution":"1","location":"assets","locale":"","width":2214,"height":946},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3698335,"resolution":"2","location":"assets","locale":"","width":2560,"height":1800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3698335,"resolution":"3","location":"assets","locale":"","width":2560,"height":1800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3698335,"resolution":"4","location":"assets","locale":"","width":2560,"height":1800}},"screenshots":{"1":"Instant results as you type, with the matched words highlighted","2":"General tab: index status and search settings","3":"Design tab: spacing and sizing controls","4":"Usage tab: blocks, shortcodes, and a quick start guide"}},"plugin_section":[],"plugin_tags":[2109,3539,5185,166,944],"plugin_category":[],"plugin_contributors":[281025],"plugin_business_model":[],"class_list":["post-366605","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax-search","plugin_tags-instant-search","plugin_tags-live-search","plugin_tags-posts","plugin_tags-search","plugin_contributors-maticparker","plugin_committers-maticparker"],"banners":{"banner":"https:\/\/ps.w.org\/kody-search\/assets\/banner-772x250.png?rev=3698335","banner_2x":"https:\/\/ps.w.org\/kody-search\/assets\/banner-1544x500.png?rev=3698335","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kody-search\/assets\/icon-128x128.png?rev=3698335","icon_2x":"https:\/\/ps.w.org\/kody-search\/assets\/icon-256x256.png?rev=3698335","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kody-search\/assets\/screenshot-1.png?rev=3698335","caption":"Instant results as you type, with the matched words highlighted"},{"src":"https:\/\/ps.w.org\/kody-search\/assets\/screenshot-2.png?rev=3698335","caption":"General tab: index status and search settings"},{"src":"https:\/\/ps.w.org\/kody-search\/assets\/screenshot-3.png?rev=3698335","caption":"Design tab: spacing and sizing controls"},{"src":"https:\/\/ps.w.org\/kody-search\/assets\/screenshot-4.png?rev=3698335","caption":"Usage tab: blocks, shortcodes, and a quick start guide"}],"raw_content":"<!--section=description-->\n<p>Kody Search adds a fast dropdown search to your site. A visitor starts typing and matching\nposts and pages appear straight away, with the query terms highlighted and no page reload.<\/p>\n\n<p><strong>Fast, and light on your server.<\/strong> The search index loads in a single request the first\ntime a visitor uses the search box. Every keystroke after that is matched in their browser,\nso your server sees one request per visit, not one per keystroke, and results stay instant\nno matter how many people are searching at once.<\/p>\n\n<p><strong>Looks like part of your site.<\/strong> The search box picks up your active theme's fonts and\nform styling. There is nothing to skin and no CSS to write.<\/p>\n\n<p><strong>Nothing to tune.<\/strong> No relevance weights, no ranking rules, no settings you have to get\nright before results are good. Add the block and it works.<\/p>\n\n<p><strong>Accessible.<\/strong> Full keyboard navigation, correct combobox semantics, and screen reader\nannouncements for results.<\/p>\n\n<p><strong>Stays out of the way.<\/strong> Scripts and styles load only on pages that actually have a search\nbox, and the public search endpoint is rate limited against abuse.<\/p>\n\n<p><strong>Full page results too.<\/strong> A dedicated results page with pagination and a running count,\nlinked from the dropdown as \"View all results\".<\/p>\n\n<h4>What it searches<\/h4>\n\n<p>Post titles, Search Tags, and categories. Search Tags is a field Kody Search adds to the\neditor, kept separate from your site's regular Tags so tagging something for search does not\nalso change your navigation. Kody Search does not search the body text of articles.<\/p>\n\n<h4>Where it fits<\/h4>\n\n<p>Sites up to roughly 15,000 posts and pages. If you need full text search across article\nbodies, or you run a larger site, a search plugin backed by a server index is the better\nchoice, and Kody Search will tell you on its settings screen once you cross that size.<\/p>\n\n<h3>Development<\/h3>\n\n<p>This plugin ships its complete source. Nothing is obfuscated. Only the two block\neditor scripts are compiled; all PHP, all CSS, and the front-end JavaScript in\n    assets\/ run exactly as shipped, with no build step.<\/p>\n\n<h4>What is compiled, and from what<\/h4>\n\n<p>The only generated files in the plugin are:<\/p>\n\n<ul>\n<li>build\/kody-search\/index.js<\/li>\n<li>build\/kody-search\/index.asset.php<\/li>\n<li>build\/kody-search-page\/index.js<\/li>\n<li>build\/kody-search-page\/index.asset.php<\/li>\n<\/ul>\n\n<p>They are the webpack build of the block editor UI. Each <code>build\/<\/code> directory has one\nmatching source directory shipped alongside it:<\/p>\n\n<ul>\n<li>blocks-src\/kody-search\/edit.js         -&gt;  build\/kody-search\/index.js<\/li>\n<li>blocks-src\/kody-search\/block.json      -&gt;  build\/kody-search\/block.json       (copied unchanged)<\/li>\n<li>blocks-src\/kody-search-page\/edit.js    -&gt;  build\/kody-search-page\/index.js<\/li>\n<li><p>blocks-src\/kody-search-page\/block.json -&gt;  build\/kody-search-page\/block.json  (copied unchanged)<\/p>\n\n<p>edit.js is ordinary JSX built on the <code>@wordpress\/*<\/code> packages (<code>@wordpress\/blocks<\/code>,\n@wordpress\/block-editor, <code>@wordpress\/components<\/code>, <code>@wordpress\/data<\/code>,\n@wordpress\/core-data, <code>@wordpress\/i18n<\/code>, <code>@wordpress\/element<\/code>). <code>index.asset.php<\/code> is generated by\n@wordpress\/scripts: it lists the <code>wp-*<\/code> script handles the compiled file depends on\nand a content hash used for cache busting.<\/p><\/li>\n<\/ul>\n\n<h4>Build tooling (all included in the plugin)<\/h4>\n\n<ul>\n<li>package.json       - the two npm scripts and the dev dependencies<\/li>\n<li>webpack.config.js  - two explicit entry points (blocks-src\/{block}\/edit.js) and\n                   copy-webpack-plugin, which copies each block.json into build\/<\/li>\n<li>babel.config.js    - forces Babel's <em>classic<\/em> JSX runtime (pragma <code>createElement<\/code>,\n                   resolved through <code>import { createElement, Fragment } from\n                   '@wordpress\/element'<\/code> at the top of each edit.js) instead of the\n                   automatic runtime. The automatic runtime would add a dependency\n                   on the <code>react-jsx-runtime<\/code> script handle, registered in WordPress\n                   core only since 6.6; the classic runtime keeps the compiled\n                   output dependent only on handles present since WP 5.0, so the\n                   \"Requires at least: 6.3\" header stays accurate. The pragma names\n                   an imported identifier rather than the <code>wp.element.*<\/code> global so\n                   that build-time dependency extraction can see it and list\n                       wp-element in index.asset.php.<\/li>\n<\/ul>\n\n<p>Dependencies (see package.json):<\/p>\n\n<ul>\n<li>@wordpress\/scripts ^33<\/li>\n<li>copy-webpack-plugin ^12<\/li>\n<\/ul>\n\n<p>Developed and built with Node.js 20 and npm 10.<\/p>\n\n<h4>Reproduce the block build<\/h4>\n\n<p>From the plugin directory:<\/p>\n\n<pre><code>npm install\nnpm run build\n<\/code><\/pre>\n\n<p>This rebuilds the four generated files above from <code>blocks-src\/<\/code> and re-copies the two\n    block.json files. <code>npm run start<\/code> runs the same build in watch mode. Building against\nan unchanged <code>blocks-src\/<\/code> reproduces the same <code>build\/<\/code> output (the hash in\n    index.asset.php is derived from the compiled bytes, so it only changes when the\nsource does).<\/p>\n\n<pre><code>BlockModule (src\/Modules\/BlockModule.php) registers both blocks from `build\/` via\nregister_block_type(), reading each `block.json` + `index.asset.php` - so after a\n<\/code><\/pre>\n\n<p>rebuild the editor picks up the change with no other edits.<\/p>\n\n<h4>PHP<\/h4>\n\n<p>All PHP is PSR-4 autoloaded (<code>Kody\\Search\\<\/code> -&gt; <code>src\/<\/code>) through Composer; <code>composer.json<\/code>\nis included. There are no runtime Composer dependencies - the only thing shipped under\n    vendor\/ is the generated autoloader. Regenerate it with:<\/p>\n\n<pre><code>composer install --no-dev --optimize-autoloader\n<\/code><\/pre>\n\n<h4>Translations<\/h4>\n\n<pre><code>languages\/kody-search.pot is generated with WP-CLI:\n\nwp i18n make-pot . languages\/kody-search.pot --slug=kody-search --domain=kody-search\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Kody Search<\/strong> in the admin menu. This builds the initial index.<\/li>\n<li>Add the <strong>Kody Search<\/strong> block, or the <code>[kody_search]<\/code> shortcode, wherever you want the\nsearch box, for example your header or sidebar.<\/li>\n<li>Optional: add the <strong>Kody Search Page<\/strong> block or <code>[kody_search_page]<\/code> shortcode to a page\nand select that page under Kody Search, so the dropdown's \"View all results\" link has\nsomewhere to go.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20it%20search%3F\"><h3>What does it search?<\/h3><\/dt>\n<dd><p>Post titles, Search Tags, and categories. Not the body text of articles, and not your\nsite's regular Tags. If a word matters for finding a post, add it to that post's Search\nTags panel.<\/p><\/dd>\n<dt id=\"what%20content%20ends%20up%20in%20the%20index%3F\"><h3>What content ends up in the index?<\/h3><\/dt>\n<dd><p>Published posts and pages only, of the types ticked under \"Content to search\". Drafts,\npending and scheduled posts, private posts, and password-protected posts are all left out.\nA scheduled post is added by itself the moment it goes live, and a published post that\nlater becomes a draft, gets a password, or is trashed is removed from the index on save.<\/p>\n\n<p>This matters because the index is downloaded by the visitor's browser: everything in it is\ncontent any visitor could already reach on your site.<\/p><\/dd>\n<dt id=\"how%20does%20indexing%20work%3F\"><h3>How does indexing work?<\/h3><\/dt>\n<dd><p>The index builds the first time you open the Kody Search screen, then updates on its own\nwhenever a post is published, edited, trashed, or deleted. For bulk changes that skip the\neditor, such as an import, a migration, or renaming a category, there is a Rebuild Index\nbutton that refreshes everything.<\/p><\/dd>\n<dt id=\"does%20it%20need%20woocommerce%3F\"><h3>Does it need WooCommerce?<\/h3><\/dt>\n<dd><p>No. Kody Search covers posts and pages and has no WooCommerce dependency.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20post%20types%3F\"><h3>Does it work with custom post types?<\/h3><\/dt>\n<dd><p>The settings screen offers posts and pages. Other post types can be added by a developer\nwith the <code>kody_search_post_types<\/code> filter, and they are then indexed and searchable like\nany other content.<\/p><\/dd>\n<dt id=\"does%20it%20need%20javascript%3F\"><h3>Does it need JavaScript?<\/h3><\/dt>\n<dd><p>Yes. Matching happens in the visitor's browser, which is what makes results instant and\nkeeps the load off your server. With JavaScript disabled the search box renders but does\nnot return results. Your theme's own search form is unaffected and keeps working.<\/p><\/dd>\n<dt id=\"does%20it%20replace%20the%20wordpress%20search%20page%3F\"><h3>Does it replace the WordPress search page?<\/h3><\/dt>\n<dd><p>No. Kody Search adds its own box and its own optional results page, and leaves the\nbuilt-in search, your theme's search template, and <code>?s=<\/code> URLs exactly as they were.<\/p><\/dd>\n<dt id=\"does%20it%20send%20anything%20to%20an%20external%20service%3F\"><h3>Does it send anything to an external service?<\/h3><\/dt>\n<dd><p>No. There are no external requests of any kind, no analytics, no telemetry and no\naccounts. Everything runs on your own site, and the search index is stored in your own\ndatabase.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wpml%20or%20polylang%3F\"><h3>Does it work with WPML or Polylang?<\/h3><\/dt>\n<dd><p>Partly, and it does no language filtering of its own.<\/p>\n\n<p>On Polylang, a rebuild covers every language. On WPML, a rebuild covers only the language\nyou are viewing the admin in, so use the Rebuild Index button once per language, or expect\nthe other languages to drop out.<\/p>\n\n<p>Either way, results are not filtered by language: a visitor may see matches from every\nlanguage you have indexed. If language-aware search matters to your site, a plugin built\nfor multilingual search is the better fit.<\/p><\/dd>\n<dt id=\"can%20i%20change%20how%20the%20search%20box%20looks%3F\"><h3>Can I change how the search box looks?<\/h3><\/dt>\n<dd><p>Yes. The Design tab has spacing and sizing controls. Past that the box follows your theme,\nso it matches without any CSS.<\/p><\/dd>\n<dt id=\"can%20one%20search%20box%20cover%20only%20certain%20content%3F\"><h3>Can one search box cover only certain content?<\/h3><\/dt>\n<dd><p>Yes. The block has a \"Limit this search box\" panel, and the shortcode takes a <code>post_types<\/code>\nattribute. Leave it unset to search everything.<\/p><\/dd>\n<dt id=\"can%20i%20put%20more%20than%20one%20search%20box%20on%20a%20page%3F\"><h3>Can I put more than one search box on a page?<\/h3><\/dt>\n<dd><p>Yes, as many inline search boxes as you like, each working independently. The full\nresults view (the <strong>Kody Search Page<\/strong> block or <code>[kody_search_page]<\/code> shortcode) is\ndifferent: use one per page. It is meant to be the main content of a dedicated results\npage, and a second one on the same page will not run.<\/p><\/dd>\n<dt id=\"how%20large%20a%20site%20does%20it%20handle%3F\"><h3>How large a site does it handle?<\/h3><\/dt>\n<dd><p>Up to roughly 15,000 posts and pages. Beyond that, results would only cover part of your\ncontent, and the plugin says so on its settings screen. A search plugin backed by a server\nindex is the better fit at that size.<\/p><\/dd>\n<dt id=\"is%20the%20search%20endpoint%20protected%20against%20abuse%3F\"><h3>Is the search endpoint protected against abuse?<\/h3><\/dt>\n<dd><p>Yes, it is rate limited per visitor. Sites behind a CDN or proxy can adjust how visitors\nare identified with the <code>kody_search_rate_limit_identifier<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%3F\"><h3>Does it work with page caching?<\/h3><\/dt>\n<dd><p>Yes. If a cached page carries an expired security token, the search box refreshes it\nautomatically instead of failing.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20wordpress%20multisite%3F\"><h3>Does it work on WordPress Multisite?<\/h3><\/dt>\n<dd><p>Yes. Network-activate it and every site gets its own search index; sites you add later\nare set up automatically. You can also activate it on individual sites instead. Each\nsite's index and settings are its own, and settings live on that site's Kody Search\nscreen, not a network screen.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Deleting it from the Plugins screen removes its database table and every option it\ncreated, so nothing is left behind. Deactivating changes nothing, so you can safely turn\nit off and on again. Your posts and pages are never touched either way.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Instant dropdown search for your posts and pages. Results appear as you type, with no page reload.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=366605"}],"author":[{"embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/maticparker"}],"wp:attachment":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366605"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366605"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366605"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366605"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366605"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}