WP_Query-Argumente Benutzerdefinierte Felder

Wenn Sie diese Serie verfolgt haben, wissen Sie, wie WP_Query ist strukturiert und wie Sie damit benutzerdefinierte Abfragen schreiben. In der Lage sein, was zu definieren WP_Query Wenn Sie aus der Datenbank abrufen, müssen Sie wissen, mit welchen Argumenten Sie Daten abfragen können.

WP_Query verfügt über eine Vielzahl möglicher Argumente, wodurch es äußerst flexibel ist. Wie Sie es verwenden können, um fast alles, was in Ihrem gespeichert ist, abzufragen wp_posts Tabelle hat es Argumente für jede Permutation von Abfragen, die Sie möglicherweise für Ihren Inhalt ausführen möchten.

In diesem Lernprogramm werde ich die Argumente für benutzerdefinierte Felder betrachten. Aber zunächst eine kurze Zusammenfassung, wie Sie Argumente in codieren WP_Query.

Eine Zusammenfassung der Funktionsweise von Argumenten in WP_Query

Bevor wir anfangen, wollen wir kurz aufzeigen, wie die Argumente funktionieren WP_Query. Wenn du codierst WP_Query In Ihren Designs oder Plugins müssen Sie vier Hauptelemente einfügen:

  • Die Argumente für die Abfrage verwenden Parameter, die in diesem Lernprogramm behandelt werden
  • die Abfrage selbst
  • die Schleife
  • abschließen: schließen ob und während Tags und Zurücksetzen der Postdaten

In der Praxis sieht das ungefähr so ​​aus:

have_posts ()) // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); // Inhalt der abgefragten Post-Ergebnisse finden Sie hier.  // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>

Die Argumente geben WordPress an, welche Daten aus der Datenbank abgerufen werden sollen. Diese werden hier behandelt. Wir konzentrieren uns hier also nur auf den ersten Teil des Codes:

$ args = array (// Argumente für Ihre Abfrage.);

Wie Sie sehen, sind die Argumente in einem Array enthalten. Sie lernen, wie Sie diese codieren, während Sie dieses Tutorial durcharbeiten.

Kodierung Ihrer Argumente

Es gibt eine bestimmte Methode zum Codieren der Argumente im Array, die wie folgt lautet:

$ args = array ('parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value');

Sie müssen die Parameter und deren Werte in einfache Anführungszeichen setzen, verwenden => zwischen ihnen und trennen Sie sie mit einem Komma. Wenn Sie dies falsch verstehen, fügt WordPress möglicherweise nicht alle Ihre Argumente der Abfrage hinzu, oder Sie erhalten einen weißen Bildschirm.

Benutzerdefinierte Feldparameter

Benutzerdefinierte Felder, auch als Post-Metadaten bezeichnet, können eine separate Klasse namens verwenden WP_Meta_Query. Das heißt, wenn Sie eine Abfrage nur für Post-Metadaten ausführen möchten, können Sie eine der beiden verwenden WP_Meta_Query oder WP_Query (die zugreift WP_Meta_Query), wenn Sie Post-Metadaten und andere Elemente wie den Post-Typ abfragen möchten, verwenden Sie WP_Query.

Das WP_Meta_Query Die Klasse wird an anderer Stelle in dieser Serie ausführlich behandelt, daher werde ich hier nicht näher darauf eingehen, aber der Hauptunterschied zwischen dem und dem WP_Query ist dass WP_Query können Sie einige einfache Argumente erstellen, ohne geschachtelte Arrays zu verwenden.

Parameter für einfache benutzerdefinierte Feldabfragen

Die wichtigsten Parameter für die Verwendung WP_Query Benutzerdefinierte Felder werden wie folgt abgefragt:

  • meta_key (Schnur): Benutzerdefinierter Feldschlüssel.
  • meta_value (Schnur): Benutzerdefinierter Feldwert.
  • meta_value_num (Nummer): Benutzerdefinierter Feldwert.
  • meta_compare (Schnur): Bediener zum Testen der 'meta_value'. Mögliche Werte sind '=''! =', ">"'> =''<''<=''MÖGEN''NICHT WIE''IM''NICHT IN''ZWISCHEN''NICHT ZWISCHEN''EXISTIERT NICHT'"REGEXP""NICHT REGEXP" oder 'RLIKE'. Standardwert ist '='.

Verwenden Sie diese Parameter für eine einfache Abfrage für benutzerdefinierte Felder. So können Sie beispielsweise Beiträge ausgeben, die ein benutzerdefiniertes Feld mit dem Schlüssel enthalten key1 (unabhängig von ihrem Wert) verwenden Sie dieses Argument:

$ args = array ('meta_key' => 'key1');

Dies würde alle Beiträge mit einem benutzerdefinierten Feld mit der key1 Schlüssel, welchen Wert auch immer.

Wenn Sie einen Wert angeben möchten, fügen Sie ein zusätzliches Argument hinzu:

$ args = array ('meta_key' => 'key1', 'meta_value' => 'value1');

Dies würde alle Beiträge mit einem benutzerdefinierten Feld mit der key1 Schlüssel und die Wert1 Wert dafür.

Alternativ können Sie alle Beiträge mit einem benutzerdefinierten Feld mit dem Wert abrufen Wert1, unabhängig vom Schlüssel. Dies kann nützlich sein, wenn Sie mehrere benutzerdefinierte Feldschlüssel mit doppelten Werten haben:

$ args = array ('meta_value' => 'value1');

Sie können also, wie Sie sehen, nur den Schlüssel oder Wert des benutzerdefinierten Felds abfragen. Sie müssen nicht immer beides angeben.

Verwenden des meta_compare-Arguments

Sie haben vielleicht oben bemerkt, dass es viele mögliche Parameter für die gibt meta_compare Argument, und ihre Verwendung kann nicht immer sofort ersichtlich sein. Werfen wir einen Blick auf die, die Sie am häufigsten verwenden könnten:

  • =: Gleich Dies ist die Standardeinstellung, wenn Sie also keine angeben meta_compare Argument, das wird WP_Query verwenden.
  • !+: Ist ungleich zu.
  • >: Größer als.
  • > =: Größer als oder gleich wie.
  • < : Weniger als.
  • <=: Weniger als oder gleich.
  • MÖGENHinweis: Der von Ihnen verwendete Wert wird ignoriert. Sie können ihn auch mit Platzhalterzeichen verwenden, um Werte wie den gesuchten Wert zu finden.
  • NICHT WIE: Funktioniert ähnlich wie LIKE, fragt jedoch das Gegenteil ab!
  • IM: Verwenden Sie dies mit einem Array im Argument 'value', um Beiträge mit einem oder mehreren Werten im Array zu finden.
  • ZWISCHEN: Verwenden Sie ein Array mit zwei numerischen Werten (in der angegeben meta_value Argument), um Beiträge mit einem benutzerdefinierten Feldwert zwischen diesen Werten zu finden (aber ihnen nicht gleich).
  • NICHT ZWISCHEN: Fragt Beiträge mit benutzerdefinierten Feldwerten außerhalb eines Arrays mit zwei numerischen Werten ab, die durch angegeben werden meta_value Streit.

Sehen wir uns einige Anwendungsbeispiele für dieses Argument an.

Zunächst können Sie benutzerdefinierte Feldschlüssel oder Werte mit der Option ausschließen meta_compare Streit. So holen Sie alle Beiträge außer denen mit einem benutzerdefinierten Feld mit der key1 Schlüssel, würden Sie dies verwenden:

$ args = array ('meta_key' => 'key1', 'meta_compare' => '! =');

Sie könnten auch die verwenden 'NICHT IN' Wert für die meta_compare Argument, das auch mit einer Zeichenfolge aus mehreren Werten verwendet werden kann:

$ args = array ('meta_key' => 'key1, key2', 'meta_compare' => 'NOT IN');

Dies würde Beiträge abfragen, die keine benutzerdefinierten Felder mit enthalten key1 oder key2 Werte. Wenn Sie genauer sein möchten und möglicherweise nach Beiträgen mit einem benutzerdefinierten Feld und nicht mit einem anderen Feld suchen, verwenden Sie ein verschachteltes Array, auf das wir in Kürze zugreifen werden.

Die obigen Beispiele verwenden nicht numerische Werte. Sie können verwenden WP_Query Mit benutzerdefinierten Feldern mit numerischen Werten können Sie nicht nur Beiträge mit einem benutzerdefinierten Feld mit diesem Wert abrufen, sondern auch solche mit benutzerdefinierten Feldern mit höheren oder niedrigeren Werten. Sie können dies beispielsweise in einem Geschäft verwenden, wenn Sie nach Artikeln suchen, die über oder unter einem bestimmten Preis liegen.

Um nach Beiträgen mit einem benutzerdefinierten Feldwert über einer bestimmten Zahl zu suchen, verwenden Sie Folgendes:

$ args = array ('meta_key' => 'numkey', 'meta_value' => '100', 'meta_compare' => '>');

Dies würde alle Beiträge mit einem benutzerdefinierten Feld mit der Zifferntaste Schlüssel und einen Wert von über 100. Wenn Sie nach Werten von 100 oder mehr abfragen möchten, verwenden Sie 'meta_compare' => '> ='.

Sie können auch nach Beiträgen suchen, deren benutzerdefinierte Felder Werte zwischen zwei Zahlen enthalten, die Sie mit der Option angeben ZWISCHEN Argument und ein Array:

$ args = array ('meta_key' => 'numkey', 'meta_value' => array ('100', '200'), 'meta_compare' => 'BETWEEN');

Dies würde alle Beiträge mit einem Wert in der Zifferntaste benutzerdefiniertes Feld zwischen 100 und 200.

Geschachtelte benutzerdefinierte Feldabfragen

Wenn Sie mehr als ein benutzerdefiniertes Feld abfragen oder mehr als einen Operator verwenden möchten, können Sie ein verschachteltes Array verwenden.

Diese haben folgende Struktur:

$ args = array ('meta_query' => array ('relation' => ", // optionales Argument. array (// 'meta_query' Argumente gehen hier hin.)));

Die Art und Weise, wie Sie das strukturieren 'meta_query' Argument in WP_Query ist genau das Gleiche wie Sie es mit der WP_Meta_Query Klasse, die in einem späteren Tutorial dieser Serie behandelt wird, daher werde ich das hier nicht wiederholen.

Seit WordPress Version 4.1 können Sie auch mehrere Ebenen verschachtelter Arrays verwenden, um immer komplexere und präzisere Abfragen zu erstellen. Diese sehen ungefähr so ​​aus:

$ args = array ('meta_query' => array ('relation' => ", // optionales Argument. array ('relation' =>", array (// Die ersten 'meta_query'-Argumente werden hier angegeben.), array (// Zweiter Satz von 'meta_query'-Argumenten hier.))));

Auf diese Weise können Sie verschiedene Beziehungen auf verschiedenen Ebenen in Ihrer Abfrage verwenden, z. B. Abfragen nach Beiträgen mit einem Wert in einem benutzerdefinierten Feldschlüssel oder mit beiden Werten in einem anderen benutzerdefinierten Feldschlüssel. Dies wird ausführlicher mit Beispielen im Tutorial auf der beschrieben WP_Meta_Query Klasse, die Teil dieser Serie ist.

Zusammenfassung

Verwendung der WP_Query Eine Klasse zum Abfragen der Metadaten (oder benutzerdefinierten Felder) Ihrer Posts bietet Ihnen viel Flexibilität. Mehrere mögliche Argumente kombiniert mit einer Reihe von Operatoren helfen Ihnen dabei, Ihre Datenbank genau so abzufragen, wie Sie es möchten.

Wenn Sie nur Post-Metadaten-Argumente in Ihrer Abfrage verwenden möchten (und diese nicht mit anderen Argumenten kombinieren möchten, z. B. für Post-Typen), können Sie auch das verwenden WP_Meta_Query Klasse, die später in dieser Serie behandelt wird.