Necesito hacer pedidos de varios niveles en una consulta. El problema está en ordenar un valor DESC y el otro ASC como en SQL. El siguiente SQL parece darme lo que quiero cuando lo ejecuto en la 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;
El pb_issue_featured
es un valor booleano. El resultado final que necesito es la consulta para mostrar las publicaciones que tienen un metavalor de 1 para este campo en la parte superior, luego todos los demás a continuación. Luego, el orden de segundo nivel es el designado menu_order
(estoy usando el complemento de orden de tipos de publicación).
El problema es que mi valor booleano debe ordenarse de mayor a menor (1 a 0) pero el menú_orden es lo contrario. Lo que se ordena primero con el complemento tiene un orden de menú de 1. Por lo tanto, usar el 'orderby' incorporado en WP_Query no funciona. Alguien tiene sugerencias? Miré en el filtro 'posts_orderby' pero no pude conseguirlo. No estaba realmente seguro de dónde debería aplicarse o cómo podría solucionarlo. Simplemente no reordenó como lo tenía.
¡Gracias por la ayuda! Publicaré el WP_Query real si es relevante, pero quería mantenerlo lo más corto posible.
La consulta argumenta:
$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);