The conjunction of add_rewrite_rule()
& add_rewrite_tag()
is a little bit tricky, perhaps you could use parse_url
hook what came useful for me. The code below is to catch multiple paramete=value separated with slash. Code –
add_filter( 'parse_request', 'wpse128790_parse_request' );
function wpse128790_parse_request( $wp )
{
$pageslug = 'mypage';
if( isset($wp->request) && strpos($wp->request, "https://wordpress.stackexchange.com/") )
{
$requests = explode("https://wordpress.stackexchange.com/", $wp->request);
if( $pageslug == array_shift($requests) )
{
$wp->set_query_var('pagename', $pageslug);
$wp->set_query_var('attachment', false );
$wp->set_query_var('error', false );
$count = count( $requests );
if( $count > 0 )
{
// stop the canonical redirection
remove_action('template_redirect', 'redirect_canonical');
foreach( $requests as $i => $request )
{
// this should be the key, and next one will be the value
if( $i == 0 || $i % 2 == 0 )
{
if( isset($requests[$i+1]) )
$val = $requests[$i+1];
else
$val="";
$wp->set_query_var( $request, $val );
}
}
}
}
}
}
But you probably do filter the parameters using in_array or something to make sure it’s safe to be included in wp query var