wake-up-neo.net

Auftrag durch DESC, ASC in der kundenspezifischen WP_Query

Ich muss in einer Abfrage mehrstufige Bestellungen durchführen. 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;

Der pb_issue_featured ist ein boolescher Wert. Das Endergebnis, das ich brauche, ist die Abfrage, um Posts anzuzeigen, die einen Metawert von 1 für dieses Feld oben haben, dann alle anderen unten. Dann ist die Bestellung der zweiten Ebene der angegebene menu_order (ich verwende das Bestell-Plugin für Post-Typen).

Das Problem ist, dass mein Boolescher Wert von hoch nach niedrig (1 nach 0) sortiert 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 eingebauten 'orderby' funktioniert also nicht. Hat jemand Vorschläge? Ich habe in den Filter "posts_orderby" gesucht, konnte ihn jedoch nicht aktivieren. War nicht wirklich 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 eigentliche WP_Query posten, wenn sie relevant ist, aber ich wollte dies so kurz wie möglich halten.

Die Abfrage lautet:

$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);
5
ian

Versuche dies:

$args = array(
        'post_type' => 'post',
        'meta_key' => 'pb_issue_featured',
        'orderby'   => 'meta_value',
        'order' => 'DESC',
        'posts_per_page' => $posts,
        'paged' => $paged,
        'paged' => 1,
        'meta_query' => array(
            array(
                'key' => 'headline',
                'value' => 1,
                'compare' => '!=' 
                )
            )
        );

add_filter( 'posts_orderby', 'filter_query' );
$q = new WP_Query($args);
remove_filter( 'posts_orderby', 'filter_query' );

function filter_query( $query ) {
    $query .= ', wp_posts.menu_order ASC';
    return $query;
}
14
Marin Bînzari