Exclude multiple custom taxonomies terms from Wordpress search
You could try first to define all your data in an array first as taxonomies / terms pairs (I have embedded the array in an external function, but it can be added directly in the hooked function). This way you can add or remove data easily.
Then we use a foreach loop to read and set the data in the tax query. So your code will be something like:
// HERE set in the array your taxonomies / terms pairsfunction get_custom_search_data(){ return [ 'site_search' => [ 'exclude_page' ], 'job_status' => [ 'closed' ], ];}/* Exclude from WordPress Search using custom taxonomy */add_action( 'pre_get_posts', 'multiple_taxonomy_search', 33, 1 );function multiple_taxonomy_search( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } // Exclude Terms by ID from Search and Archive Listings if ( is_search() || is_tax( 'marque' ) ) { // Set the "relation" argument if the array has more than 1 custom taxonomy if( sizeof( get_custom_search_data() ) > 1 ){ $tax_query['relation'] = 'AND'; // or 'OR' } // Loop through taxonomies / terms pairs and add the data in the tax query foreach( get_custom_search_data() as $taxonomy => $terms ){ $tax_query[] = [ 'taxonomy' => $taxonomy, 'field' => 'slug', // <== Terms slug seems to be used 'terms' => $terms, 'operator' => 'NOT IN', ]; } // Set the defined tax query $query->set( 'tax_query', $tax_query ); }}
Code goes in function.php file of your active child theme (or active theme). Untested, it should work.