Ich muss in einer Abfrage mehrstufig bestellen. Das Problem besteht darin, einen Wert DESC und den anderen ASC wie in SQL zu bestellen. Das folgende SQL scheint mir zu geben, was ich will, wenn ich es im Terminal ausführe:
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;
Das pb_issue_featured
ist ein boolescher Wert. Das Endergebnis, das ich benötige, ist die Abfrage, um Beiträge mit einem Metawert von 1 für dieses Feld oben und alle anderen unten anzuzeigen. Dann ist die Bestellung der zweiten Ebene die festgelegte menu_order
(ich verwende das Post-Typ-Bestell-Plugin).
Das Problem ist, dass mein boolescher Wert hoch bis niedrig (1 bis 0) geordnet werden muss, aber die menu_order ist das Gegenteil. Was zuerst mit dem Plugin bestellt wird, hat eine Menüreihenfolge von 1. Die Verwendung des in WP_Query integrierten 'orderby' funktioniert also nicht. Hat jemand Vorschläge? Ich habe in den Filter 'posts_orderby' geschaut, konnte ihn aber nicht ausführen. Ich war mir nicht sicher, wo es angewendet werden sollte oder wie ich es beheben könnte. Es hat einfach nicht so bestellt, wie ich es hatte.
Danke für die Hilfe! Ich werde die aktuelle WP_Query veröffentlichen, wenn sie relevant ist, aber ich wollte dies so kurz wie möglich halten.
Die Abfrage argumentiert:
$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);