Tenho um tipo de postagem personalizado "Listagem" e desejo obter todas as Listagens que tenham um campo personalizado gateway_value != 'Yes'
e ordenar os resultados por outro campo personalizado location_level1_value
,. Posso fazer com que as consultas funcionem separadamente, mas não posso combiná-las:
Consulta 1 (classificar por local):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
Consulta 2 (valor do campo personalizado! = Sim):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
Consulta combinada:
Eu olhei para o códice para obter ajuda com isso, mas a seguinte consulta não funciona:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
O que estou fazendo de errado com a consulta combinada?
[ATUALIZAÇÃO]: agora que o 3.1 foi lançado, a consulta combinada acima ainda não funciona. Eu recebo resultados, apenas não classificados corretamente.
[UPDATE]: var_dump($wp_query->request)
fornece o seguinte:
string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
fonte
meta_query
parâmetro é novo no 3.1, que deve ser lançado muito em breve, mas a versão estável atual ainda é 3.0.5, sem esse parâmetro.Respostas:
Você pode usar a consulta para filtrar o conteúdo conforme desejado, usando o 'meta_query' com opções de filtragem e, na parte do pedido, basta adicionar / modificar os seguintes parâmetros:
'order' => 'ASC'
fonte
Assim como Jan disse no novo WordPress 3.1, você pode usar,
meta_query
mas até isso sair, você pode usar sua primeira consulta para fazer o pedido e filtrar dentro do seu loop da seguinte forma:e adicione este código às suas funções.php
agora isso deve funcionar.
fonte
gateway_value == "Yes"
estariam sem o condicional ... Alguma idéia de como consertar isso?Desculpas por responder à minha própria pergunta:
Olhando para [http://core.trac.wordpress.org/ticket/15031,95[1], parece que este é um problema conhecido. Eu o corrigi (hackeado?) Para funcionar usando
post_filter
, assim (apenas para referência de qualquer pessoa que possa estar procurando a mesma resposta):Em functions.php ###
Wp_query alterado no arquivo de modelo ###
fonte