Ich versuche, eine Abfrage zu erhalten, um alle Posts abzurufen, bei denen eine bestimmte meta_key
nicht vorhanden ist, und sie dann zu erstellen.
Ich habe Probleme beim Finden dieser Beiträge, da die von mir getestete Abfrage nicht zu funktionieren scheint.
Hier ist der Code, mit dem ich versuche, diese Beiträge zu bekommen:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
Dies gibt nichts zurück, wenn es keine Posts mit dem Schlüssel gibt colors
, sondern sie ids
der Posts mit dem Schlüssel, colors
wenn dieser Schlüssel vorhanden ist (das Gegenteil von dem, was ich brauche). Ich habe es EXIST
stattdessen versucht, aber kein Glück.
Wenn mir jemand einen Tipp geben kann, wie eine Abfrage wie die von mir benötigte richtig erstellt werden kann, bin ich dankbar dafür.
Vielen Dank!
custom-post-types
wp-query
post-meta
JordanBel
quelle
quelle
Antworten:
Ich habe noch einige Tests damit durchgeführt und kann ehrlich gesagt keinen Grund finden, warum es nicht funktionieren würde (es sei denn, der obige Code ist nur ein Ausschnitt und der echte Code passt zu meinen Beispielen unten). Ich habe jedoch ein paar Dinge entdeckt, die Sie in die richtige Richtung führen könnten.
1) Diese Meta-Abfrage ist an sich gleichbedeutend mit "colors IS NULL", dh sie gibt die Posts zurück, für die dieser Schlüssel nicht in der Postmeta-Tabelle festgelegt ist. Dies ist der oben gezeigte Fall, und es hätte funktionieren sollen.
2) Vor WordPress 3.9 wird diese Bedingung geändert, wenn der 'Relations'-Index auf' OR 'gesetzt wird. Es kehrt das Gegenteil zurück. Frag mich nicht warum. Dies ist besonders wichtig, wenn Sie mehrere Meta-Abfragen durchführen. Das bedeutet, dass es zunächst nicht möglich ist, nach Posts zu suchen, bei denen der Schlüssel 'colors' auf 'blue' (oder was auch immer) oder überhaupt nicht gesetzt ist. Die folgende Abfrage ignoriert die erste Bedingung und gibt nur diejenigen zurück, die der zweiten Bedingung entsprechen.
3) Wir können WordPress jedoch dazu bringen, die erste Bedingung zu verwenden, wenn wir den 'Wert' setzen. Es ist kein relevanter Wert erforderlich (er wird meines Wissens ignoriert), er muss jedoch festgelegt werden, damit die
NOT EXISTS
Bedingung wirksam wird.Dies galt bis WordPress 3.9. Wenn Sie noch eine ältere Version verwenden, ist dies eine praktikable Problemumgehung.
quelle
EXISTS
undNOT EXISTS
„Fehler“ , die Sie benötigt einen Wert angeben, wurde in WP 3.9 fixiertMit einer benutzerdefinierten Abfrage funktionierte dies für mich:
quelle