Ich sehe, dass viele Leute es vorziehen, den Haken pre_get_posts anstelle von query_posts zu verwenden
Yay!
So pre_get_posts
filtert ein WP_Query
Objekt , das heißt alles , was Sie tun können , über die query_posts()
Sie über tun können , $query->set()
und $query->get()
. Insbesondere können wir das meta_query
Attribut verwenden (siehe Codex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Aber ... dies ersetzt die ursprüngliche 'Meta-Abfrage' (falls vorhanden). Wenn Sie also die ursprüngliche Meta-Abfrage nicht vollständig ersetzen möchten, empfehle ich Folgendes:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
Auf diese Weise fügen wir unsere Meta-Abfrage neben vorhandenen Meta-Abfragen hinzu.
Sie können / sollten nicht festlegen relation
Eigenschaft $meta_query
zu AND
oder OR
(nach Rückkehr Beiträge , die alle zufrieden stellen, oder zumindest eine, Meta - Abfragen).
* Hinweis: Bei dieser Art von Abfrage werden Posts mit dem Metaschlüssel "featured" zurückgegeben, deren Wert jedoch nicht ist yes
. Es werden keine Posts berücksichtigt, bei denen der "empfohlene" Metaschlüssel nicht vorhanden ist. Sie werden dies in 3.5 tun können .
Yes
undNo
Optionen und 'Nein' wird standardmäßig ausgewählt. Wenn ich einen Beitrag veröffentlichen möchte, werde ich auswählenYes
. Ich möchte jedoch, dass die letzten 5 Beiträge weiterhin angezeigt werden und andere in der Hauptabfrage angezeigt werden. Ich möchte nicht jedes Mal zurückgehen und die Auswahl ändern, damit ich nur die letzten 5 Beiträge ausschließen kann. Ich sehe viele ähnliche Fragen zum Stapelaustausch, und es sollte eine einfache Möglichkeit geben, diese vorgestellten Beiträge zu verwalten. (Ein Weg, der sich nicht auf die allgemeine Leistung auswirkt, nicht viele Abfragen erstellt oder gemischte SQL-Abfragen erfordert)Yes
oder einenNo
Wert für alle Posts zu erstellen . Es wäre großartig, solche Beiträge auszuschließen, denen einfach derfeatured
Schlüssel fehlt .Uncaught Error: [] operator not supported for strings
fehlerhaft ausgefallen, da das Originalmeta_query
als null zurückkam. Sie können das Problem umgehen, indem Sie auf ein leeres Array zurückgreifen, wenn kein Switching-Out$meta_query = $query->get('meta_query');
für vorhanden ist$meta_query = ( is_array( $query->get('meta_query') ) ) ? $query->get('meta_query') : [];
.Ich möchte meine vorübergehende Lösung für vorgestellte Posts veröffentlichen, falls einige Leute davon Gebrauch machen. Ich benutze
pre_get_posts
hier keinen Haken, aber auch nichtquery_posts
. Das Problem ist, dass ich mit der Hauptabfrage spielen und eine SQL-Abfrage ausführen muss. Ich würde mich freuen, wenn Experten den Code überprüfen und mir mitteilen könnten, ob er in Ordnung ist und keine Leistungsprobleme verursacht. Es wird auch toll sein, wenn jemand einen besseren Ansatz hat und ihn mit uns teilt.Abfrage für vorgestellte Beiträge erstellen
Erstellen Sie die Hauptabfrage, schließen Sie die Posts mit dem angegebenen meta_key aus, beschränken Sie den Ausschluss auf die letzten 5 Posts und zeigen Sie alle anderen an.
quelle
Als Antwort auf @Carlisle können Sie die folgenden Schritte ausführen, wenn Sie die letzten 5 als "Hervorgehoben" gekennzeichneten Beiträge ausschließen möchten. Ändern Sie die posts_per_page in die Anzahl der auszuschließenden Beiträge und die meta_query in die Art und Weise, wie Sie die vorgestellte Kategorie bestimmen.
quelle