It seems the normal and expected behaviour to me. meta_query
is not a registered query var. You can see a list of registered query vars, and their relationship with WP_Query in this codex entre. Any other query var you want to use needs to be registered and handled by you.
A very quick and general example:
// Add custom query var
add_filter( 'query_vars', 'cyb_add_query_vars' );
function cyb_add_query_vars( $vars ) {
$vars[] = 'my_meta_query';
return $vars;
}
// Manipulate query
add_action( 'pre_get_posts', 'cyb_pre_get_posts' );
function cyb_pre_get_posts( $query ) {
// Only main query?
// if( $query->is_main_query() ) ...
// Only admin?
// if( is_admin() ) ....
// Or whatever, you can manipulate $query as you wish
if( ! empty( get_query_var( 'my_meta_query' ) ) ) {
$query->set( 'meta_query', get_query_var( 'my_meta_query' ) );
}
}