When adding a search form to your Wordpress blog you will want to
have control over what sort of form is displayed. It is possible to
override the search form created by the widget function without having
to go into the /wp-includes/widget.php file and editing the wp_widget_search function. Here is the function that is present in Wordpress 2.6.
function wp_widget_search($args) {
extract($args);
$searchform_template = get_template_directory() . '/searchform.php';
echo $before_widget;
// Use current theme search form if it exists
if ( file_exists($searchform_template) ) {
include_once($searchform_template);
} else { ?>
<form id="searchform" method="get" action="<?php bloginfo('url'); ?>/"><div>
<label class="hidden" for="s"><?php _e('Search for:'); ?></label>
<input type="text" name="s" id="s" size="15" value="<?php the_search_query(); ?>" />
<input type="submit" value="<?php echo attribute_escape(__('Search')); ?>" />
</div></form>
<?php }
echo $after_widget;
}
Notice that the first thing the function tries to do is load a template file called searchform.php,
and if this doesn’t exist the function prints out a standard search
form. That is it basically. If you want to override the search form
created by this function then just create a file called searchform.php in your template directory and create a search form inside this file. The form must have the following:
- The action of the form should go to the home of the blog. So if
your blog is located at domain.com/blog then the action should go to
there.
- The method of the form should be get, but the form will also work with a post method.
- A text input box must be present and this must have the name of s.
- For good search form usability you should print out the search
query in the text field of the form. This can be done with the function
the_search_query(), which will print out the search query, if there is one.
There are many different ways to create a search form. I found these
two in two different templates, created by different people.
<h2>Search</h2>
<form method="get" id="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div class="searchbox">
<label for="s">Find:</label>
<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" size="14" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>
This one will print out a little bit of JavaScript in the text box.
<div id="search">
<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<div><input type="text" value="search..." name="s" id="s"
onfocus="if (this.value == 'search...') {this.value = '';}" onblur="if
(this.value == '') {this.value = 'search...';}" />
</div>
</form>
</div>
They both seem to work quite well, but I would advise that any
search form you create should be copied from the original and modified.
This is usually the best practice with Wordpress themes as the
Wordpress documentation can be a little thin on the ground (or hidden)
and their developers tend to use the best functions available.
|