Möglich, Beiträge von mehreren Metaschlüsseln / Werten in einer einzelnen Abfrage zu erhalten?

Angenommen, ich habe eine Reihe von Posts, einige von ihnen haben einen Metaschlüssel namens “key1” und einige von ihnen haben einen Metaschlüssel namens “key2”. Aber die Beiträge haben nicht beides.

Ich möchte eine benutzerdefinierte Abfrage erstellen, die jeden Post mit “key1” oder “key2” als Metaschlüssel abruft. (nicht ein einziger Beitrag, der beides hat).

Nachdem ich geforscht hatte, benutzte ich das meta_query-Array, das mir die Suche nach Beiträgen mit mehreren Meta-Schlüsseln ermöglicht, am nächsten (für eine einzige Abfrage). Allerdings suche ich nach Posts von mehreren Metaschlüsseln .. dh: wenn es key1 oder key2 hat, lade die Abfrage hoch.

Abgesehen von den oben genannten kann die einzige andere Möglichkeit, die ich für Posts suchen kann, die key1 oder key2 haben, darin bestehen, mehrere Abfragen und Schleifen zu erstellen. Ich frage mich, ob es eine sauberere Lösung gibt. Mein ideales Endergebnis wäre, dass der resultierende Post miteinander vermischt und so angezeigt wird, als käme er aus einer einzigen Abfrage. Bei mehreren Abfragen glaube ich, dass ich dies nicht erreichen kann, da ich zuerst die Ergebnisse mit key1 und dann die Ergebnisse mit key2 in der nächsten Abfrage / Schleife abrufen werde.

Danke im Voraus!

Solutions Collecting From Web of "Möglich, Beiträge von mehreren Metaschlüsseln / Werten in einer einzelnen Abfrage zu erhalten?"

Eine einfache Abfrage wie die folgende sollte für Sie funktionieren:

< ?php $_query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1' ), array( 'key' => 'key2' ), ), ) ); ?> 

Beachten Sie die 'relation'=>'OR' in meta_query .

Mehr bei:

  • WP_Query – Benutzerdefinierte Felder
  • WP_Meta_Query

Sie könnten versuchen, ein paar weitere Prüfungen in Ihrer Meta-Abfrage hinzuzufügen.

 $args = array( 'post_type' => 'post', 'posts_per_page' => 10, 'meta_query' => array( 'relation' => 'OR', array( 'relation' => 'AND', // make sure only this key exists by matching parameters array( 'key' => 'key1', 'compare' => 'EXISTS' ), array( 'key' => 'key2', 'compare' => 'NOT EXISTS' ) ), array( 'relation' => 'AND', // check for the opposite here array( 'key' => 'key2', 'compare' => 'EXISTS' ), array( 'key' => 'key1', 'compare' => 'NOT EXISTS' ) ) ) ); 

Dies ist eine in Ordnung Lösung, wenn Sie nur zwei Metaschlüssel vergleichen, aber es könnte sauberer sein, eine SQL-Abfrage zu schreiben.