Ich habe ein benutzerdefiniertes Feld namens, startDate
aber es ist nur bei einigen Ereignissen. Ich habe mich gefragt, ob es nicht für einen Beitrag festgelegt ist, mit dem ich post_date
die Liste der Beiträge erstellen kann.
// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date
query_posts(
array(
array(
'posts_per_page' => 10,
'meta_key' => 'startDate',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'ASC'
),
array(
'meta_key' => 'post_date',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<'
)
)
);
Antworten:
Wenn Sie es in SQL erklären können, können Sie es abfragen! Es gibt drei Stellen, an denen wir die Standardabfrage ändern möchten:
Der Join und die where-Klausel werden über die
_get_meta_sql()
Funktion hinzugefügt . Die Ausgabe wird gefiltert, damit wir uns daran anschließen können:Die order-Klausel wird gefiltert durch
posts_orderby
:Dies gibt uns die folgende SQL-Abfrage:
Denken Sie daran, die Filter nach der Abfrage zu deaktivieren, da Sie sonst auch andere Abfragen durcheinander bringen. Und wenn möglich , sollten Sie sich nicht
query_posts()
selbst anrufen , sondern die Hauptpost-Abfrage ändern, die WordPress beim Einrichten der Seite ausführt.quelle
functions.php
Datei Ihres Themas einfügen . Kurz bevor Sie die Abfrage ausführen, platzieren Sie die beidenadd_filter()
Zeilen. Nach der Abfrage schreiben Sie,remove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
um sie wieder zu entfernen.Versuchen Sie etwas in der Art von:
quelle
Bei einem Aufruf von Abfrageposts wird nur eine Abfrage ausgeführt, nicht zwei. Nein, Sie können nicht zwei separate Abfragen durchführen und dann die Ergebnisse verketten.
Denken Sie daran, dass Sie hier einige Beiträge auswählen und diese dann anzeigen. Dieser Satz wird auf einmal ausgewählt. Wenn Sie zwei separate Sätze von Posts erhalten und diese dann zusammenführen möchten, müssen Sie dies selbst mit get_posts oder ähnlichem tun.
quelle