This can not be done with wp_query, so I'm looking for alternatives. A query like this is what I guess I need:
SELECT
wp_posts.ID, wp_term_taxonomy.term_taxonomy_id, wp_term_taxonomy.taxonomy, wp_terms.name, wp_term_taxonomy_1.taxonomy, wp_terms_1.name
FROM
(((((wp_term_relationships INNER JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id)
INNER JOIN wp_posts ON wp_term_relationships.object_id = wp_posts.ID)
INNER JOIN wp_term_relationships AS wp_term_relationships_1 ON wp_posts.ID = wp_term_relationships_1.object_id)
INNER JOIN wp_term_taxonomy AS wp_term_taxonomy_1 ON wp_term_relationships_1.term_taxonomy_id = wp_term_taxonomy_1.term_taxonomy_id)
INNER JOIN wp_terms AS wp_terms_1 ON wp_term_taxonomy_1.term_id = wp_terms_1.term_id
WHERE
(((wp_term_taxonomy.taxonomy)="category")
AND ((wp_term_taxonomy_1.taxonomy)="tipo")
AND ((wp_posts.post_status)="publish")
AND ((wp_posts.post_type)="alojamiento"))
ORDER BY
wp_terms.name, wp_terms_1.name
;
I tried to do with a hook on posts_join, like this....
add_filter('posts_join', 'mi_join' );
function mi_join( $join ){
global $wpdb;
$join .= " (((((wp_term_relationships INNER JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id)
INNER JOIN wp_posts ON wp_term_relationships.object_id = wp_posts.ID)
INNER JOIN wp_term_relationships AS wp_term_relationships_1 ON wp_posts.ID = wp_term_relationships_1.object_id)
INNER JOIN wp_term_taxonomy AS wp_term_taxonomy_1 ON wp_term_relationships_1.term_taxonomy_id = wp_term_taxonomy_1.term_taxonomy_id)
INNER JOIN wp_terms AS wp_terms_1 ON wp_term_taxonomy_1.term_id = wp_terms_1.term_id";
return str_replace('FROM wp_posts', 'FROM', $join);
}
... but I can not get rid of the original 'FROM' clause (the str_replace part of de return in function).
Any clues? Thanks