Buscando termos de taxonomias relacionados ao post type

Recentemente em um dos projetos para um cliente, foi me solicitado que criasse um algoritmo para listar todos os termos de um post-type específico. Assim eu teria um filtro de um formulário populando com os termos e taxonomias exatas.

Seria algo simples de fazer usando a função get_terms padrão do wordpress. No entanto, no meu projeto possui diversos post_types definidos e diversas taxonomias. E então como eu listaria todos os termos relacionados a determinada taxonomia de um post_type específico?

Fica complexo até de explicar o motivo do get_termos não ser suficiente útil para este proposito.

O [get_terms] relaciona termos de uma determinada taxonomia, mas não é capaz (pelo menos por enquanto e nos testes que fiz) de relacionar a um post type específico também, isso considerando que ambas taxonomias sejam usadas/ligadas/relacionadas em ambos post_types.

Foi então necessário que eu criasse uma função de relacionamento entre o post type e o terms.

Antes, para entender melhor o porque da função, irei explicar uma situação como exemplo:

Tenho 2 post_type chamados: Veiculo e Translado;
Agora eu tenho 2 taxonomias que estão ligadas ao Veiculo e ao translado: Carros e Moto;
E digamos que eu tenha 3 termos ligados a taxonomia Carros: corolla, celta, astra;

Com nossa informação definida, sabemos que temos que relacionar taxonomia, termos e o post type, desta forma, teremos o seguinte algoritmo:

[cc lang=”php”]
$query = $wpdb->prepare(

“SELECT DISTINCT t.name,t.slug from $wpdb->terms AS t
INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id
INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id
WHERE p.post_type IN($post_types) AND tt.taxonomy=’$nome_da_taxonomia'”
);

$results = $wpdb->get_results( $query );

[/cc]

Os campos que serão atualizados neste caso, são na linha do WHERE, com a variável do $post_type e com a $nome_da_taxonomia.

É importante saber diferenciar taxonomia de termos na hora de programar e montar seu loop. Com o get_terms ele não sabe associar um termo a um post_type, buscando assim todos os termos da taxonomia que você estipular. Limitando então o seu loop.

De maneira geral, eu criei e disponibilizo abaixo um algoritmo necessário para que nosso loop traga todos os termos que estiverem apenas no post_type que você definir. Fazendo assim um filtro mais completo do seu loop. Esta é a parte completa do código que listei acima também.

[cc lang=”php”]

global $post, $wpdb; // inicia as funções globais

// abaixo a função get_terms que traz todos os termos de uma determinada taxonomia, mas não filtra por post_type! (Postei como exemplo, mas não é usada no que precisamos)

$terms = get_terms(
$nome_da_Taxonomia , array( ‘hide_empty’ => 1, ‘parent’ => 0)
);

// Abaixo um pequeno loop com um select que criei

//START select
$select = ‘

Anúncio