Preciso fazer pedidos em vários níveis em uma consulta. O problema está em solicitar um valor DESC e o outro ASC como no SQL. O SQL a seguir parece me dar o que eu quero quando o executo no terminal:
SELECT DISTINCT * FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_type = 'post'
AND wp_postmeta.meta_key = 'pb_issue_featured'
AND wp_posts.post_status = 'publish'
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;
O pb_issue_featured
é um valor booleano. O resultado final de que preciso é a consulta para exibir postagens que tenham um meta-valor 1 para esse campo na parte superior e depois todas as outras abaixo. Em seguida, a ordem da segunda camada é a designada menu_order
(estou usando o plug-in de ordem de tipos de postagem).
A questão é que meu valor booleano precisa ser ordenado de alto a baixo (1 a 0), mas o menu_order é o oposto. O que é pedido primeiro com o plug-in tem uma ordem de menu igual a 1. Portanto, o uso do 'orderby' incorporado no WP_Query não funciona. Alguém tem sugestões? Eu olhei no filtro 'posts_orderby', mas não consegui. Não tinha muita certeza de onde deveria ser aplicado ou como eu poderia solucionar o problema. Simplesmente não reordenou do jeito que eu tinha.
Obrigado pela ajuda! Vou postar o WP_Query real, se for relevante, mas eu queria manter isso o mais curto possível.
A consulta args:
$args = array(
'post_type' => 'post',
'meta_key' => 'pb_issue_featured',
'orderby' => 'meta_value',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => $posts,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'headline',
'value' => 1,
'compare' => '!='
)
)
);
$q = new WP_Query($args);
Respostas:
Tente o seguinte:
fonte