Add Search by Category Functionality to Your WordPress Site

Add Search by Category Functionality to Your WordPress Site

If you have a site with a lot of content and a number of different categories, then there’s a good chance your visitors will want to search within certain categories and not others. The solution to this problem is to make your site searchable by individual categories.

Below is a way to manually do it.

Manually Expand the Functionality of Your Current Search Box

Another slightly more complicated method is to give your current search box “search by category” functionality. I found this trick at Deluxe Blog Tips.

Place the following code into the searchform.php file of your theme. (Appearance > Editor > Search Form – searchform.php) If your theme does not have a searchform.php file, you can create one:

<form id="searchform" method="get" action="<?php bloginfo('url'); ?>">
    <input type="text" name="s" id="s" size="15" />
    <?php wp_dropdown_categories('show_option_none=Select category'); ?>
    <input type="submit" value="Search" />
</form>

Then put this code at the bottom of your functions.php file. (Appearance > Editor > Theme Functions – functions.php):

add_action('pre_get_posts', 'search_by_cat');
function search_by_cat()
{
    global $wp_query;
    if (is_search()) {
        $cat = intval($_GET['cat']);
        $cat = ($cat > 0) ? $cat : '';
        $wp_query->query_vars['cat'] = $cat;
    }
}

And here’s the result:

One nice feature of this method is that when you are on the category page for a specific category, the search box will automatically switch to that category for more searches.

Have you tried this feature yet? Let us know in the comments!
Hassan Akhtar
Hassan Akhtar Hassan Akhtar is the lead dev for SmartCrawl. In his free time he enjoys writing about his development adventures at WPGurus.net.