Custom search results in WordPress

24 Feb 2011 09:52 | Geplaatst door Marcel |

In WordPress it’s easy to use a widget for searching within the website. Often the standard search query suffices. But sometimes you want to refine the search options. This can be done in a simple way by adding extra fields in the form.

The function get_search_form() has standard as output in WordPress 3.0 the next html:

<form role="search" method="get" id="searchform" action="/" >
<div><label for="s">Search for:</label>
<input type="text" value="searchtest" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

The only variable that will be submitted here is “s” with the value of the search query, in this case “searchtest”. However, you can refine it in many ways. For example by only showing posts in the search results. This can be done with the next addition:

<input type="hidden" value="post" name="post_type" id="post_type" />

Here we submit the value “post”. The default value is “any”, meaning, posts, pages, etc.
There are many additions like this. With a var_dump() of the object $wp_query you can see all the default values of the search variables. With a var_dump() of $wp_query->query you can see the current query.

Searchform.php

You can make this set of input-fields the standard search query by adding a searchform.php in your theme directory. The searchform.php can look like this:

<form role="search" method="get" id="searchform" action="/" >
<div><label for="s">Search for:</label>
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />
<input type="hidden" value="post" name="post_type" id="post_type" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

Each time you call the function get_search_form() you will get the right form.