Ho bisogno di fare un ordine multi-livello in una query. Il problema è con l'ordine di un valore DESC e l'altro ASC come in SQL. Il seguente SQL sembra darmi quello che voglio quando lo eseguo nel terminale:
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;
Il pb_issue_featured
è un valore booleano. Il risultato finale di cui ho bisogno è la query per visualizzare i post che hanno un meta valore di 1 per questo campo in alto, quindi tutti gli altri sotto. Quindi l'ordinamento di secondo livello è quello designato menu_order
(sto usando il plug-in per l'ordine dei tipi di posta).
Il problema è che il mio valore booleano deve essere ordinato da alto a basso (da 1 a 0) ma menu_order è l'opposto. Ciò che viene ordinato per primo con il plug-in ha un ordine di menu pari a 1. Quindi l'utilizzo di 'orderby' incorporato in WP_Query non funziona. Qualcuno ha suggerimenti? Ho esaminato il filtro "posts_orderby" ma non sono riuscito a prenderlo. Non ero davvero sicuro di dove dovesse essere applicato o come avrei potuto risolverlo. Semplicemente non ha riordinato come avevo fatto io.
Grazie per l'aiuto! Pubblicherò il WP_Query reale se è pertinente ma volevo mantenerlo il più breve possibile.
La query 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);