Wie verwendet man orderby mit meta_query in Wordpress 3.1?

21

Ist es möglich, meine Liste der benutzerdefinierten Posts nach dem Filtern mit meta_query nach den Metadaten meiner Wahl zu ordnen?

Zum Beispiel habe ich einen benutzerdefinierten Beitragstyp namens Webinare. Ich versuche, alle anstehenden Webinare aufzulisten und sie im benutzerdefinierten Metafeld webinar_startDate sortieren zu lassen.

Mit der folgenden Abfrage konnte ich die Webinare mit Ausnahme der alten Webinare erfolgreich zurückgeben. Sie werden jedoch weiterhin in der Reihenfolge veröffentlicht, in der sie veröffentlicht wurden, und nicht per webinar_startDate.

<?php $my_array =  array(
    'meta_query' => array(
            array(
                'key' => 'webinar_startDate',
                'value' => date("Y-m-d H:i:s"),
                'compare' => '>=',
                'type' => 'DATETIME'
            )
    ),
    'orderby' => 'meta_value',
    'post_type' => 'webinars',
    'posts_per_page' => 20,
    'order' => 'ASC'
); ?>

Ich vermute, dass aufgrund des Wechsels von 3.0 zu 3.1 die Verwendung von orderby => meta_value wahrscheinlich anders ist, aber ich kann keine Antwort in der WordPress-Dokumentation finden, um dies zu erklären.

Kann jemand helfen? Danke im Voraus.

Jeff K.
quelle

Antworten:

17

Das neue meta_queryArray wählt aus, welche Posts die Abfrage zurückgibt. Also ja, Sie geben den 'Schlüssel' darin an meta_query, aber Sie können immer noch die alte Methode von verwenden

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',

Zusätzlich zur meta_query, da diese Zeilen angeben, wie die resultierende Abfrage sortiert werden soll. Also ja, Sie könnten denselben meta_key zweimal angeben.

somatisch
quelle
9
Diese Antwort ist nicht ganz richtig. Wenn Sie ein orderby und einen meta_key außerhalb einer vorhandenen meta_query hinzufügen, wird das Ergebnis in der Tat nach dem angegebenen Schlüssel sortiert. Es enthält jedoch auch alle Posts, in denen dieser Metaschlüssel festgelegt ist, auch wenn der Wert die Kriterien nicht erfüllt in der meta_query (zumindest hat das beim testen bei mir so funktioniert). Eine bessere Möglichkeit, dies zu tun, besteht darin, ein Array als orderby-Parameter zu übergeben, wie hier beschrieben: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
1

Ich verwende den folgenden Code für meine benutzerdefinierten Beiträge events, um alle Beiträge in einer Schleife abzurufen.

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));

Ich denke, Sie verwenden Ihren Code ungefähr auf die gleiche Weise. Ich denke du vermisst das meta_keymit dem Namen des Metafeldes zu sortieren. Vielleicht hilft es, wenn Sie hinzufügen

'meta_key' => 'webinar_startDate',

zum äußeren Array?

Guru 2.0
quelle
Ich sehe jetzt. Ich war durch die Wordpress-Dokumentation verwirrt, in der stand, dass "meta_key" und "meta_value" abgeschrieben wurden. Ich nahm an, dass das bedeutete, dass ich sie nicht benutzen konnte, aber ich denke, das war irreführend. Vielen Dank!
Jeff K.