Consulta de campo e categoria personalizada

Eu criei um arquivo .php personalizado que deve mostrar a lista de todas as postagens que correspondem à escolha do usuário. Eu tenho 3 campos personalizados e 1 condição de categoria. Eu tentei todas as consultas que eu poderia encontrar no database do Codex wordpress, mas nada parece funcionar.

Eu criei 3 campos personalizados: a_field, a_fieldd, a_fielddd (e, claro, tenho postagens com os campos já publicados para o teste) agora eu só quero mostrar todas as postagens com campos personalizados com valores especificados (escolha do usuário) e somente se essas postagens estiverem dentro da categoria escolhida

EDITAR

Eu tenho uma consulta (com apenas 1 valor para teste), que parece estar funcionando, mas às vezes leva alguns anos até 4 segundos. alguma sugestão? Eu sei que seria melhor se eu usar wp_query, mas achei que isso era mais fácil de modificar. neste exemplo, estou tentando obter o post com meta_key a_field com o valor “5”

SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) WHERE 1=1 AND wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' AND ( (wp_postmeta.meta_key = 'a_field' AND find_in_set('5',wp_postmeta.meta_value)) ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10 

alguma sugestão?

Solutions Collecting From Web of "Consulta de campo e categoria personalizada"

Para o tratamento de categorias múltiplas, você precisa de category__in ou de tax_query , para vários campos personalizados que você usa meta_query . As várias opções para ambos são cobertas na página WP_Query codex .

 $args = array( 'posts_per_page' => 10, 'category__in' => array( 163, 165 ), 'meta_query' => array( array( 'key' => 'a_field', 'value' => array( 1, 2 ), 'compare' => 'IN' ), array( 'key' => 'a_fieldd', 'value' => 3, 'compare' => '=' ), array( 'key' => 'a_fielddd', 'value' => array( 1, 3, 5 ), 'compare' => 'IN' ) ) ); $results = new WP_Query( $args ); if( $results->have_posts() ){ while( $results->have_posts() ){ $results->the_post(); the_title(); } }