A good question was asked in the post Natural-language date queries:
Is it possible to extend this so that I can simply add a the year in the search and only results from that year would show?
The answer is yes! Add these functions to your site:
add_filter( 'relevanssi_modify_wp_query', function( $query ) { $m = preg_match( '/\b\d{4}\b/', $query->query_vars['s'], $matches ); if ( 1 === $m ) { $year = $matches[0]; if ( $year > 1900 && $year < 2100 ) { global $relevanssi_original_query; $relevanssi_original_query = $query->query_vars['s']; $query->query_vars['year'] = $year; $query->query_vars['s'] = str_replace( $year, '', $query->query_vars['s'] ); } } return $query; } ); add_filter( 'posts_pre_query', function( $a, $b ) { global $wp_query, $relevanssi_original_query; if ( ! empty( $relevanssi_original_query ) ) { $wp_query->query_vars['s'] = $relevanssi_original_query; } return $a; }, 100, 2 );
The code consists of two functions. The first one checks the search query. If there’s a single four-digit number between 1900 and 2100 (change those numbers to whatever is reasonable for your site), the number is removed from the search query and converted into a year parameter.
The second function restores the search query to what it was before the number was removed, so the user doesn’t have to wonder why their search query changed.