Keyword search in multiple categories

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&hellip;" 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);