Most likely because the query is also searching for a match against the term name/slug, as opposed to “match either term name or meta field”.
If you don’t need the search to also look for matches by term name/slug, just unset the search term early on when you apply your meta query:
add_action( 'parse_term_query', function ( $wp_term_query ) {
$taxonomy = $wp_term_query->query_vars['taxonomy'];
$search = $wp_term_query->query_vars['search'] ?? '';
if ( ! $search || $taxonomy !== [ 'feedback-stats' ] ) {
return;
}
unset( $wp_term_query->query_vars['search'] );
$meta_query = [
'relation' => 'OR',
];
$search_meta_keys = [
'access_id',
// Add your other meta keys
];
foreach ( $search_meta_keys as $key ) {
$meta_query[] = [
'key' => $key,
'value' => $search,
'compare' => 'LIKE',
];
}
$wp_term_query->query_vars['meta_query'] = $meta_query;
});
If you do indeed need the search to match either the term name or field(s), there’s a bit more work ahead of you as we’ll need to hook into the generated SQL of the meta query and create an OR
search.