The reason your search doesn't work, is because your query has no search:

```php
$query = new WP_Query([
  'post_type' => 'post',
  'tax_query' => array(
    'relation' => 'OR',
       array(
      's'=> $getSearch // for title and content
    ),
...
```

For some reason, the `s` parameter has been inserted inside the `tax_query`, which doesn't make a lot of sense.

For example, here is a normal query that searches:

```php
$query = new WP_Query([
  's' => 'search terms',
etc..
```

But for some reason you've put it inside the `tax_query`:

```php
$query = new WP_Query([
  'tax_query' => array(
    'relation' => 'OR',
       array(
          's'=> $getSearch // for title and content
       ),
```

This will not work, and is not what the documentation and examples suggest.


What's more, the code is creating a brand new query unnecessarily, which also doesn't make sense as it doubles the page loading time, and breaks pagination.

Instead, all these issues can be bypassed trivially by using the `pre_get_posts` filter, e.g. in `functions.php`:

```php
add_action( 'pre_get_posts', function( \WP_Query $q ) {
    if ( !$q->is_main_query() || !$q->is_search() ) {
        return;
    }
    $q->set( 'tax_query', ....... );
} );
```

Now you can use `search.php` as intended, with a standard post loop, and everything would work as it normally does. No need for a query at the top of the file.

The TLDR: If you want to change the posts WP shows, tell WP what you want via `pre_get_posts`. Don't create a second query, it cripples performance and introduces lots of new problems