Key Takeaways
- WordPress search forms can be enhanced beyond the basic querystring parameter ‘s’ by using other parameters deep within the WordPress core, allowing for more focused search results.
- Search results can be refined by category or tag by passing their respective slugs to the ‘category_name’ or ‘tag’ parameters, respectively. This can be done without the need for plugins.
- Advanced searches can be further refined by multiple values using PHP array parameters, which can be intercepted and set in the WordPress theme’s functions.php file. This allows users to choose multiple tags for a more focused search.
<span><span><span><form> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></form></span> </span><span><span><span><fieldset>></fieldset></span> </span><span><span><span><input> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search…"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span> </span><span><span><span><button> type<span>="submit"</span>></button></span>Search<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span>There’s nothing wrong with that and I thought it was the only option for many, many years. However, more advanced queries are possible without the aid of plugins (although plenty are available). Deep within the WordPress core, the application parses several other querystring parameters and uses them to return a more focused set of search results. There is some rudimentary documentation which lists the parameter names:
- attachment
- attachment_id
- author
- author_name
- cat
- category_name
- comments_popup
- day
- error
- feed
- hour
- m
- minute
- monthnum
- name
- p
- page_id
- paged
- pagename
- post_parent
- post_type
- preview
- second
- static
- subpost
- subpost_id
- tag
- tag_id
- tb
- w
- year
Refine Search by Category
You can limit results to a category by passing its slug to the category_name parameter, e.g.<span><span><span><form> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></form></span> </span><span><span><span><fieldset>></fieldset></span> </span><span><span><span><input> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search…"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span> </span><span><span><span><button> type<span>="submit"</span>></button></span>Search<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span>Our search form can allow the user to refine their search to specific categories:
http://yoursite.com/?s=search+term&category_name=kittensIf you’d rather list all categories, add the following code between the tags:
<span><span><span><form> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></form></span> </span><span><span><span><fieldset>></fieldset></span> </span><span><span><span><input> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search…"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span> </span><span><span><span><select> name<span>="category_name"</span>></select></span> </span><span><span><span><option> value<span>=""</span>></option></span>all categories<span><span></span>></span> </span><span><span><span><option> value<span>="kittens"</span>></option></span>cute kittens<span><span></span>></span> </span><span><span><span><option> value<span>="puppies"</span>></option></span>adorable puppies<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span><button> type<span>="submit"</span>></button></span>Search<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span></span></span></span></span>
Refine Search by Tag
Search results can be limited to a tag by passing its slug to the tag parameter, e.g.<span><span><?php </span></span><span><span>// generate list of categories </span></span><span><span>$categories = get_categories(); </span></span><span><span>foreach ($categories as $category) { </span></span><span> <span>echo '<option value="', $category->slug, '">', $category->name, "</option>\n"; </span></span><span><span>} </span></span><span><span>?></span></span></span>Your search from could therefore limit results to certain tags, e.g.
http://yoursite.com/?s=search+term&tag=cockroachSimilarly, you can generate a list of all tags for the select field:
<span><span><span><form> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></form></span> </span><span><span><span><fieldset>></fieldset></span> </span><span><span><span><input> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search…"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span> </span><span><span><span><select> name<span>="tag"</span>></select></span> </span><span><span><span><option> value<span>=""</span>></option></span>any tag<span><span></span>></span> </span><span><span><span><option> value<span>="cockroach"</span>></option></span>cockroaches<span><span></span>></span> </span><span><span><span><option> value<span>="snake"</span>></option></span>snakes<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span><button> type<span>="submit"</span>></button></span>Search<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span></span></span></span></span>
Advancing Advanced Search
What if you want to refine the search by multiple values? For example, the user could choose two or more tags and resulting pages must have them all set. We cannot achieve this using URL parameters alone but let’s start by defining an HTML search form:<span><span><?php </span></span><span><span>// generate list of tags </span></span><span><span>$tags = get_tags(); </span></span><span><span>foreach ($tags as $tag) { </span></span><span> <span>echo '<option value="', $tag->slug, '">', $tag->name, "</option>\n"; </span></span><span><span>} </span></span><span><span>?></span></span></span>Note that I’ve used a PHP array parameter named taglist . You can use any name other than those already reserved by WordPress (see the list above). We can now intercept a search submission in our WordPress theme’s functions.php file. The advanced_search_query function detects whether a search is active then sets the WP_Query tag_slug__and parameter accordingly.
<span><span><span><form> method<span>="get"</span> action<span>="<span><?php bloginfo('url'); ?></span>"</span>></form></span> </span><span><span><span><fieldset>></fieldset></span> </span><span><span><span><input> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search…"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span> </span><span><span><span><p>></p></span>Refine search to posts containing chosen tags:<span><span></span>></span> </span><span><span><?php </span></span><span><span>// generate list of tags </span></span><span><span>$tags = get_tags(); </span></span><span><span>foreach ($tags as $tag) { </span></span><span> <span>echo </span></span><span> <span>'<label>', </label></span></span><span> <span>'<input type="checkbox" name="taglist[]" value="', $tag->slug, '"> ', </span></span><span> <span>$tag->name, </span></span><span> <span>"\n"; </span></span><span><span>} </span></span><span><span>?></span> </span><span><span><span><button> type<span>="submit"</span>></button></span>Search<span><span></span>></span> </span><span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span></span></span>Finally, we use the pre_get_posts action hook to run our advanced_search_query function before a query is executed:
<span>// advanced search functionality </span><span>function advanced_search_query($query) { </span> <span>if($query->is_search()) { </span> <span>// tag search </span> <span>if (isset($_GET['taglist']) && is_array($_GET['taglist'])) { </span> <span>$query->set('tag_slug__and', $_GET['taglist']); </span> <span>} </span> <span>return $query; </span> <span>} </span> <span>}</span>Adding advanced search facilities to WordPress is remarkably easy yet few developers realize it’s possible … perhaps because documentation and examples are a little sparse. I discovered it by accident so I hope you find this code useful in your next WordPress project.
Frequently Asked Questions on Advanced Search in WordPress
How can I customize the search results in WordPress?
Customizing search results in WordPress can be achieved by using the WP_Query class. This class allows you to define specific parameters to tailor your search results. For instance, you can set parameters to search only within post titles, exclude certain post types, or even search within custom fields. You can also use plugins like SearchWP that offer advanced search customization options.
Can I use tags to improve search results in WordPress?
Yes, tags can significantly improve search results in WordPress. By using the get_the_tags() function, you can retrieve the tags associated with a particular post. This can be used to create a more refined search experience, allowing users to search for posts with specific tags.
How can I change the search query parameter in WordPress?
The search query parameter in WordPress can be changed using the ‘query_vars’ filter. This allows you to change the default ‘s’ parameter to something more specific to your needs. For example, you can change it to ‘search_term’ to make your URLs more user-friendly.
What is WP_Query in WordPress?
WP_Query is a class in WordPress that allows you to create custom queries and loops. It provides numerous parameters that you can use to customize your queries, such as post type, category, tag, author, and more. This makes it a powerful tool for creating advanced search functionalities.
How can I exclude certain post types from search results in WordPress?
Excluding certain post types from search results can be done using the ‘pre_get_posts’ action hook in conjunction with the WP_Query class. You can set the ‘post_type’ parameter to an array of the post types you want to include in the search results, effectively excluding all others.
Can I search within custom fields in WordPress?
Yes, you can search within custom fields in WordPress using the ‘meta_query’ parameter in WP_Query. This allows you to specify a custom field key and value, and return posts that match these criteria.
How can I improve the search functionality in WordPress?
Improving search functionality in WordPress can be achieved by using plugins like SearchWP, Relevanssi, or Ajax Search Pro. These plugins offer advanced search features like partial matching, keyword stemming, and search weighting, providing a better user experience.
Can I create a search form in WordPress without a plugin?
Yes, you can create a search form in WordPress without a plugin by using the get_search_form() function. This function generates the HTML for a search form, which you can customize to suit your needs.
How can I display the search query in WordPress?
The search query can be displayed in WordPress using the get_search_query() function. This function retrieves the search query string and can be used to display the search term on your search results page.
Can I limit the number of search results in WordPress?
Yes, you can limit the number of search results in WordPress by using the ‘posts_per_page’ parameter in WP_Query. This allows you to specify the number of posts to display per page, effectively limiting the number of search results.
The above is the detailed content of How to Add an Advanced Search to Your WordPress Site. For more information, please follow other related articles on the PHP Chinese website!

Yes,WordPressisexcellentforcreatingaportfoliowebsite.1)Itoffersnumerousportfolio-specificthemeslike'Astra'foreasycustomization.2)Pluginssuchas'Elementor'enableintuitivedesign,thoughtoomanycanslowthesite.3)SEOisenhancedwithtoolslike'YoastSEO',boosting

WordPressisadvantageousovercodingawebsitefromscratchdueto:1)easeofuseandfasterdevelopment,2)flexibilityandscalability,3)strongcommunitysupport,4)built-inSEOandmarketingtools,5)cost-effectiveness,and6)regularsecurityupdates.Thesefeaturesallowforquicke

WordPressisaCMSduetoitseaseofuse,customization,usermanagement,SEO,andcommunitysupport.1)Itsimplifiescontentmanagementwithanintuitiveinterface.2)Offersextensivecustomizationthroughthemesandplugins.3)Providesrobustuserrolesandpermissions.4)EnhancesSEOa

Enable comments on your WordPress website to provide visitors with a platform to participate in discussions and share feedback. To do this, follow these steps: Enable Comments: In the dashboard, navigate to Settings > Discussions, and select the Allow Comments check box. Create a comment form: In the editor, click Add Block and search for the Comments block to add it to the content. Custom Comment Form: Customize comment blocks by setting titles, labels, placeholders, and button text. Save changes: Click Update to save the comment box and add it to the page or article.

How to copy WordPress subsites? Steps: Create a sub-site in the main site. Cloning the sub-site in the main site. Import the clone into the target location. Update the domain name (optional). Separate plugins and themes.

The steps to create a custom header in WordPress are as follows: Edit the theme file "header.php". Add your website name and description. Create a navigation menu. Add a search bar. Save changes and view your custom header.

Enable comments in WordPress website: 1. Log in to the admin panel, go to "Settings" - "Discussions", and check "Allow comments"; 2. Select a location to display comments; 3. Customize comments; 4. Manage comments, approve, reject or delete; 5. Use <?php comments_template(); ?> tags to display comments; 6. Enable nested comments; 7. Adjust comment shape; 8. Use plugins and verification codes to prevent spam comments; 9. Encourage users to use Gravatar avatar; 10. Create comments to refer to

You can install the FTP plug-in through WordPress, configure the FTP connection, and then upload the source code using the file manager. The steps include: installing the FTP plug-in, configuring the connection, browsing the upload location, uploading files, and checking that the upload is successful.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Zend Studio 13.0.1
Powerful PHP integrated development environment

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

WebStorm Mac version
Useful JavaScript development tools
