let’s start by defining an HTML search form:
<form method="get" action="<?php bloginfo('url'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="search…" maxlength="50" required="required" />
<p>Refine search to posts containing chosen tags:</p>
<?php
// generate list of categories
$tags = get_categories();
foreach ($tags as $tag) {
echo
'<label>',
'<input type="checkbox" name="taglist[]" value="', $tag->slug, '" /> ',
$tag->name,
"</label>\n";
}
?>
<button type="submit">Search</button>
</fieldset>
</form>
Add this to functions.php
function advanced_search_query($query) {
if($query->is_search()) {
// tag search
if (isset($_GET['taglist']) && is_array($_GET['taglist'])) {
$query->set('tag_slug__and', $_GET['taglist']);
}
return $query;
}
}
add_action('pre_get_posts', 'advanced_search_query', 1000);