James,
I’m looking to do almost the same thing.
What I did was use the WP Rewrite functionality. See:
https://codex.www.ads-software.com/Function_Reference/WP_Rewrite
I pretty much reused the first example, but with a different querystring parameter (i.e. not ‘id’)
It almost works. The proper WordPress Page is loaded, however, when I ask PHP for the querystring, it isn’t there, the $_SERVER[“REQUEST_URI”] just has the clean URI and not the rewritten URI with the querystring.
I solved this by just parsing the querystring proper myself, but I wonder where the querystring went.