{"id":391870,"date":"2026-11-07T00:55:02","date_gmt":"2026-11-07T00:55:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/search-steer\/"},"modified":"2026-11-07T00:54:45","modified_gmt":"2026-11-07T00:54:45","slug":"mwt-search-steer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/mwt-search-steer\/","author":14591973,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"MWT Search Steer","header_author":"Cornel Raiu","header_description":"Hide posts from site search, or steer search per post: keywords bring a post into the results, stop keywords keep it out.","assets_banners_color":"3c546d","last_updated":"2026-11-07 00:54:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.master-webtools.com\/plugins\/search-steer\/","header_author_uri":"https:\/\/www.cornelraiu.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":133,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"cornel.raiu","date":"2026-11-07 00:54:45","revision":3788905}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3788905,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3788905,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3788905,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3788905,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3788905,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3788905,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"MWT Search Steer\",\"description\":\"Sample help-center posts with search keywords, stop keywords and a post hidden from search. Search the site for \\\"refund\\\" to see them at work.\",\"author\":\"cornelraiu-1\",\"categories\":[\"Search\"]},\"landingPage\":\"\\\/wp-admin\\\/edit.php\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"login\":true,\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"mwt-search-steer\"},\"options\":{\"activate\":true}},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"MWT Search Steer demo\",\"permalink_structure\":\"\\\/%postname%\\\/\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\nuse SearchSteer\\\\Keywords\\\\Taxonomies;\\nuse SearchSteer\\\\Visibility\\\\HiddenFlag;\\n\\n\\\/\\\/ Title, content, keywords, stop keywords, hidden, days ago.\\n$posts = [\\n\\t[ 'Returns and exchanges', 'Send any item back within 30 days and we will exchange it or give your money back.', [ 'refund', 'money back', 'return policy' ], [], false, 2 ],\\n\\t[ 'Refund request form', 'Tell us your order number and we will send the money back to your card.', [], [], false, 4 ],\\n\\t[ 'Refund policy (2019)', 'Our old rules for refunds. Replaced by Returns and exchanges.', [], [ 'refund', 'return policy' ], false, 900 ],\\n\\t[ 'Track your parcel', 'Every order gets a tracking number by email when it ships.', [ 'tracking', 'where is my order', 'delivery' ], [], false, 6 ],\\n\\t[ 'Gift cards', 'Buy a gift card for any amount. It never expires.', [ 'voucher', 'present' ], [ 'discount code' ], false, 9 ],\\n\\t[ 'Holiday shipping dates', 'Order by December 18 to get your parcel before the holidays.', [ 'christmas', 'delivery' ], [], false, 30 ],\\n\\t[ 'Thank you for your order', 'We have your order and will email you when it ships.', [], [], true, 400 ],\\n];\\n\\nforeach ( $posts as list( $title, $content, $keywords, $stop, $hidden, $days_ago ) ) {\\n\\t$date = gmdate( 'Y-m-d H:i:s', time() - $days_ago * DAY_IN_SECONDS );\\n\\t$id   = wp_insert_post( [\\n\\t\\t'post_title'    => $title,\\n\\t\\t'post_content'  => '<!-- wp:paragraph --><p>' . $content . '<\\\/p><!-- \\\/wp:paragraph -->',\\n\\t\\t'post_status'   => 'publish',\\n\\t\\t'post_author'   => 1,\\n\\t\\t'post_date'     => get_date_from_gmt( $date ),\\n\\t\\t'post_date_gmt' => $date,\\n\\t] );\\n\\twp_set_object_terms( $id, $keywords, Taxonomies::KEYWORD );\\n\\twp_set_object_terms( $id, $stop, Taxonomies::STOP );\\n\\tHiddenFlag::set( $id, $hidden );\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3788905,"resolution":"1","location":"assets","locale":"","width":2560,"height":2000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3788905,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3788905,"resolution":"3","location":"assets","locale":"","width":2560,"height":1520},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3788905,"resolution":"4","location":"assets","locale":"","width":2560,"height":1040},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3788905,"resolution":"5","location":"assets","locale":"","width":2560,"height":2000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3788905,"resolution":"6","location":"assets","locale":"","width":2560,"height":693}},"screenshots":{"1":"A search for \"refund\": the returns page is found by its keyword and listed first, and the out-of-date 2019 refund policy is kept out by its stop keyword.","2":"The editor sidebar: hide the post from site search, and add its search keywords and stop keywords.","3":"The Search column shows each post's keywords, stop keywords and whether it is hidden, and the filter lists the posts that have them.","4":"Quick edit changes keywords, stop keywords and \"Hide from site search\" without opening the post.","5":"The settings: post types, how keywords match, which list wins, the order of the results and where search settings apply.","6":"Import the posts that Search Exclude, Hide from Search or Hide Posts hide from search, with one click."}},"plugin_section":[],"plugin_tags":[44130,44129,944,291273,5013],"plugin_category":[],"plugin_contributors":[153902],"plugin_business_model":[],"class_list":["post-391870","plugin","type-plugin","status-publish","hentry","plugin_tags-exclude-from-search","plugin_tags-hide-from-search","plugin_tags-search","plugin_tags-search-keywords","plugin_tags-search-results","plugin_contributors-cornelraiu-1","plugin_committers-cornelraiu-1"],"banners":{"banner":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/banner-772x250.png?rev=3788905","banner_2x":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/banner-1544x500.png?rev=3788905","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/icon.svg?rev=3788905","icon":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/icon.svg?rev=3788905","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-1.png?rev=3788905","caption":"A search for \"refund\": the returns page is found by its keyword and listed first, and the out-of-date 2019 refund policy is kept out by its stop keyword."},{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-2.png?rev=3788905","caption":"The editor sidebar: hide the post from site search, and add its search keywords and stop keywords."},{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-3.png?rev=3788905","caption":"The Search column shows each post's keywords, stop keywords and whether it is hidden, and the filter lists the posts that have them."},{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-4.png?rev=3788905","caption":"Quick edit changes keywords, stop keywords and \"Hide from site search\" without opening the post."},{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-5.png?rev=3788905","caption":"The settings: post types, how keywords match, which list wins, the order of the results and where search settings apply."},{"src":"https:\/\/ps.w.org\/mwt-search-steer\/assets\/screenshot-6.png?rev=3788905","caption":"Import the posts that Search Exclude, Hide from Search or Hide Posts hide from search, with one click."}],"raw_content":"<!--section=description-->\n<p>WordPress search only looks at a post's title, excerpt and content. MWT Search Steer gives you three controls, post by post:<\/p>\n\n<ul>\n<li><strong>Hide from site search<\/strong> keeps a post out of every search. Use it for thank-you pages, landing pages, old announcements and anything else visitors should not find by searching.<\/li>\n<li><strong>Search keywords<\/strong> bring a post into the results. Give \"Returns and exchanges\" the keywords refund and money back, and a search for \"refund\" finds it, even though the word is nowhere in the post.<\/li>\n<li><strong>Stop keywords<\/strong> keep a post out of the results for some searches only. Give an old \"Refund policy (2019)\" the stop keyword refund, and a search for \"refund\" never shows it, even though its title matches.<\/li>\n<\/ul>\n\n<p>Set them in the editor sidebar, in quick edit, or for many posts at once with bulk edit and the \"Hide from site search\" bulk action. A Search column and a filter on the post lists show which posts have search settings.<\/p>\n\n<h4>Moving from another plugin<\/h4>\n\n<p>MWT Search Steer imports the posts that <strong>Search Exclude<\/strong>, <strong>Hide from Search<\/strong> and <strong>Hide Posts<\/strong> hide from search, with one click under Settings &gt; MWT Search Steer. The other plugin's data is not changed, so you can import, check, and then deactivate it.<\/p>\n\n<h4>Built to stay out of the way<\/h4>\n\n<ul>\n<li><strong>Only the search query is changed.<\/strong> Menus, archives, widgets, related posts and every other query on the page are left alone.<\/li>\n<li><strong>Nothing is hidden in wp-admin.<\/strong> Hidden posts stay in the post lists and in admin searches, so editors can always find them.<\/li>\n<li><strong>No search index, no custom tables, no migrations.<\/strong> Settings live in post meta and private taxonomy terms that WordPress already indexes, so they scale to thousands of posts and nothing is lost on update.<\/li>\n<li><strong>No ads, no dashboard widgets, no upsells, no outside service.<\/strong><\/li>\n<li><strong>Safe SQL.<\/strong> Every column is qualified with its table, so search keeps working when another plugin joins post meta.<\/li>\n<li><strong>Private.<\/strong> Visitors never see a post's keywords or that it is hidden: no archive pages, feeds, sitemaps or CSS classes, and the REST API only shows them to people who can edit posts.<\/li>\n<\/ul>\n\n<h4>Settings<\/h4>\n\n<p>Under Settings &gt; MWT Search Steer you choose:<\/p>\n\n<ul>\n<li><strong>Post types<\/strong> that can have search settings. Posts and pages by default.<\/li>\n<li><strong>How keywords match<\/strong>, separately for keywords and stop keywords:\n\n<ul>\n<li>Whole words (default): \"gift\" matches \"gift card\" but not \"gifts\".<\/li>\n<li>Partial words: \"refund\" also matches \"refu\" and \"refunds\".<\/li>\n<\/ul><\/li>\n<li><strong>Which list wins<\/strong> when a search matches both a keyword and a stop keyword of the same post. Stop keywords win by default.<\/li>\n<li><strong>Order<\/strong>: list posts that match by keyword first.<\/li>\n<li><strong>Where<\/strong> search settings apply: always on the search page, and optionally in REST API and AJAX searches and in the admin post lists.<\/li>\n<\/ul>\n\n<p>Case and accents are ignored, so \"Caf\u00e9\", \"cafe\" and \"CAFE\" are the same keyword.<\/p>\n\n<h4>For developers<\/h4>\n\n<p>Search settings apply to the main search query on the front end. To apply them to another query, use the filter:<\/p>\n\n<pre><code>add_filter( 'mwtss_applies_to_query', function ( $applies, $query ) { return $applies || $query-&gt;get( 'my_live_search' ); }, 10, 2 );\n<\/code><\/pre>\n\n<p>To turn them off for one query, pass <code>'mwtss_skip' =&gt; true<\/code> to <code>WP_Query<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from Plugins &gt; Add New.<\/li>\n<li>Open a post and use the Site search panel and the keyword panels in the sidebar.<\/li>\n<li>Optional: change the matching and other options under Settings &gt; MWT Search Steer.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20a%20hidden%20post%20disappear%20from%20my%20site%3F\"><h3>Does a hidden post disappear from my site?<\/h3><\/dt>\n<dd><p>No. It only stays out of your site's search results. It is still listed in menus, archives and widgets, and reachable at its own address.<\/p><\/dd>\n<dt id=\"does%20it%20hide%20posts%20from%20google%3F\"><h3>Does it hide posts from Google?<\/h3><\/dt>\n<dd><p>No. MWT Search Steer controls the search on your own site. To keep a page out of search engines, use your SEO plugin's \"noindex\" setting.<\/p><\/dd>\n<dt id=\"why%20does%20a%20hidden%20post%20still%20show%20in%20my%20live%20search%3F\"><h3>Why does a hidden post still show in my live search?<\/h3><\/dt>\n<dd><p>Live search boxes often search through the REST API or admin-ajax.php. Tick \"Also apply them to REST API and AJAX searches\" in the settings. Live search plugins that run their own queries can call the <code>mwtss_applies_to_query<\/code> filter, described below.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20relevanssi%2C%20searchwp%2C%20jetpack%20search%20or%20elasticpress%3F\"><h3>Does it work with Relevanssi, SearchWP, Jetpack Search or ElasticPress?<\/h3><\/dt>\n<dd><p>No. Those plugins replace WordPress's own search query with their own index, and MWT Search Steer changes WordPress's own query. Use their exclusion features instead.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes, for the product search on the shop's search page, which uses WordPress's own query. Choose Products under Post types in the settings. WooCommerce's own visibility still applies: search keywords do not bring in a product whose catalog visibility leaves it out of search, or an out-of-stock product when the shop hides those.<\/p><\/dd>\n<dt id=\"how%20do%20i%20import%20from%20search%20exclude%2C%20hide%20from%20search%20or%20hide%20posts%3F\"><h3>How do I import from Search Exclude, Hide from Search or Hide Posts?<\/h3><\/dt>\n<dd><p>Go to Settings &gt; MWT Search Steer and click the import button for your plugin. The section shows only the plugins that have hidden posts on your site. Search Exclude can also hide every post of a type, a category or an author. Those settings are listed but not imported: select the posts in their list and use the \"Hide from site search\" bulk action.<\/p><\/dd>\n<dt id=\"does%20a%20search%20need%20to%20match%20every%20word%3F\"><h3>Does a search need to match every word?<\/h3><\/dt>\n<dd><p>No. A post is added when any keyword matches the search. With the keyword refund, a search for \"refund status\" finds the post.<\/p><\/dd>\n<dt id=\"can%20visitors%20see%20the%20keywords%3F\"><h3>Can visitors see the keywords?<\/h3><\/dt>\n<dd><p>No. Keywords have no public pages and are not printed anywhere on the site. Through the REST API, only users who can edit posts can read them.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20settings%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens to my settings when I delete the plugin?<\/h3><\/dt>\n<dd><p>They are kept, unless you tick \"Delete all keywords, stop keywords, hidden flags and settings when the plugin is deleted\" in the settings first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Hide posts from site search, or steer search per post: keywords bring a post into the results, stop keywords keep it out.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/391870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=391870"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cornelraiu-1"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=391870"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=391870"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=391870"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=391870"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=391870"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=391870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}