First, use $query->query_vars
and not $query->query
.
Secondly, you should run this conditional check before overriding the corresponding query var:
empty( $_REQUEST['{VAR}'] ) || !isset($query->query_vars['{VAR}'])
where {VAR}
corresponds to the query var’s name/key such as orderby
.
So try this, which worked for me:
// Set default `orderby` to 'registered'.
if( empty( $_REQUEST['orderby'] ) || !isset($query->query_vars['orderby']) ) {
$query->set('orderby', 'registered');
}
// Set default `order` to 'DESC'.
if( empty( $_REQUEST['order'] ) || !isset($query->query_vars['order']) ) {
$query->set('order', 'DESC');
}
which you would use in place of:
if( !isset($query->query['orderby']) ) {
$query->set('orderby', 'registered');
$query->set('order', 'DESC');
}