I've found this plug-in very useful and will be using it as the basis of a custom metadata table that I need for a plug-in I'm working on.
I just wanted to suggest maybe caching the term meta?
Of course the metadata functions you use, already cache the term's metadata - but they need to first need to generate the cache. As it stands each 'new' call to get_metadata will require a query of the database to generate the cache of that term.
I wanted to suggest hooking into the hooks get_terms (for when taxonomy terms are queried) and wp_get_object_term (for when terms associated with some posts are queried). These both pass an array of terms - allowing you to call update_meta_cache with an array of term IDs to generate the cache for all those terms at once.
So, when posts are queried - the metadata of all the associated terms will generated to cache in one query - and then inside the loop all calls to retrieve the metdata will be obtained from cache.
Pseudo code:
add_filter('get_terms','update_term_cache');
add_filter('wp_get_object_terms','update_term_cache');
function update_term_cache($terms){
$taxonomy ='mytaxonomy'; //Set taxonomy
$term_ids = wp_list_pluck($terms,'term_id');
update_meta_cache($taxonomy,$update_cache);
return terms;
}
If the term's metadata is already in cache, then update_meta_cache doesn't do anything - so it's not wasteful.