Consulta personalizada para ordem por várias taxonomias

Recebi este site de um cliente para corrigir alguns erros. Eles são uma concessionária de automóveis.

O desenvolvedor anterior criou um tipo de postagem personalizado (veículo) e existem duas taxonomias: marca e modelo. (não são campos personalizados, são taxonomias)

Se eu fizer algo assim, posso pedir facilmente pelo fabricante de veículos

SELECT distinct(wp_posts.id), wp_posts.post_title, wp_terms.name FROM wp_posts, wp_postmeta, wp_terms where wp_posts.id = wp_postmeta.post_id and wp_postmeta.meta_value = wp_terms.term_id and wp_postmeta.meta_key = "make" and wp_posts.post_status = "publish" and wp_posts.post_type = "vehicle" order by wp_posts.id, wp_terms.name; 

Mas como posso encomendar ao modelo e modelo ao mesmo tempo?

Solutions Collecting From Web of "Consulta personalizada para ordem por várias taxonomias"

Bem, no caso de alguém procurar e tentar encontrar uma maneira de fazer o que fiz aqui, descobri-lo.

Minha tarefa era: eu tenho um tipo de postagem personalizado chamado veículo e há duas taxonomias, o fabricante do veículo e o modelo do veículo. Eu precisava mostrar todos os posts ordenados alfabeticamente primeiro pelo fabricante, então por modelo, então na lista faz sentido, exempla: Audi A1, Audi A4, BMW 120, etc.

É fácil de encomendar apenas por uma taxonomia, mas, se eu ordene apenas pelo fabricante, minhas postagens apareceriam como Audi A4, Audi A1, Audi A3.

Resolvi isso fazendo isso.

Primeiro, vou fazer um get_results regular para que eu possa obter uma ordem alfabética de todos os meus fabricantes:

  $makers_list = $wpdb->get_results("SELECT GROUP_CONCAT(pm.post_id ) as id_carro, tm.name as maker FROM wpav_postmeta pm INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value WHERE pm.meta_key='make' GROUP BY tm.name ORDER BY tm.name "); 

A function “GROUP_CONTACT” do mysql me devolverá uma lista de IDs de postagem, como 19,49,59,83,58,395,394 etc.

Então, eu faço um foreach em cada fabricante e obter uma lista de pedidos de veículos para esse fabricante em particular, ordem pela taxonomia modelo.

 foreach ( $makers_list as $maker ) { $vehicle_list = $wpdb->get_results("SELECT tm.name as model , pm.post_id FROM wpav_postmeta pm INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value WHERE pm.post_id IN (" . $fabr->vehicle_id . ") and pm.meta_key='model' ORDER BY model "); 

Então é apenas uma questão de fazer outro foreach para cada um desses carros

 foreach ( $vehicle_list as $vehicle ) { $status_post = get_post_status($vehicle->post_id); $type_post = get_post_type($vehicle->post_id); if ( $status_post == 'publish' && $type_post == 'vehicle') { $post = get_post($vehicle->post_id); 

Como você pode ver, eu estou checando se a publicação é publicada e é o tipo de postagem correto, então eu configurei a variável de publicação e é feito, o ciclo de wordpress normal depois disso.

Espero poder ser de alguma ajuda.