After struggling with this, I found a workaround that worked.
Since every custom field has a connection with my custom post type, I was able to use wp_get_object_terms to get the terms for each custom taxonomy.
Using the query to retrieve all posts:
$args = array(
'post_type' => 'houses'
);
$houses = new WP_Query($args);
$posts = $houses->posts;
// get an array with all ID fields
$my_post_ids = wp_list_pluck($posts, 'ID');
After that I can get the terms for these IDs above:
$city_terms = wp_get_object_terms($my_post_ids, 'cities');
$status_terms = wp_get_object_terms($my_post_ids, 'status');
$type_terms = wp_get_object_terms($my_post_ids, 'type');
And to have the behavior I needed when an option is selected in order to refresh the selects information, I had just to update the query for that. For example, if I selected some city:
$args = array(
'post_type' => 'houses',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'city',
'value' => 107,
'compare' => 'LIKE'
)
)
);
To do the filter, just need to add a new relation inside the meta_query array.
$args = array(
'post_type' => 'houses',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'city',
'value' => 107,
'compare' => 'LIKE'
),
array(
'key' => 'status',
'value' => 80,
'compare' => 'LIKE'
)
)
);
All of this combined with Ajax to make the data update for each select.