Allow visitors to search by multiple tags (specific IDs)

Solution

1) First, make sure you are using WordPress 4.3, which was just released, or this won’t work.

2) Second, drop the entire pre_get_posts hook, you won’t need it. WordPress will automatically filter the search archive based on the terms you’ve included in the querystring (this is the 4.3 functionality I just mentioned).

3) Next, replace your call to $tags = get_tags() with the following…

$tags = get_tags(
    array(
        'include' => array( 1, 17, 22 )
    )
);

Simply change the include => array() array to use only the tag/term ids you want… alternatively, you might instead change include to exclude to show everything EXCEPT the tags you specify.

4) Finally, change the name of your checkbox inputs to tag[].

What We Did

The premise is this: WordPress 4.3 will automatically filter an archive page (including search results) based an array of querystring values you pass to it. This includes, for instance, “tag”.

So, we can tell the get_tags() function to fetch only specific tags that we specify. It takes an associative array as an argument, and one of those is include, which takes another array of only the tag ids you want it to return.

To tie it all together, we need to make sure that the form is building the appropriate query string that WordPress expects. Something like yoursite.com/blog/?s=your+search+terms&tag%5B%5D=foo&tag%5B%5D=bar

To achieve that, we just make sure that the checkboxes have the name tag[] – which will be formatted by the querystring correctly, and then caught by WordPress which will use it to filter the search results.

Leave a Comment