WP_Query Argumente Taxonomien

In dieser Serie haben Sie bisher gelernt, wie WP_Query ist strukturiert und was sind seine Eigenschaften und Methoden. Jetzt betrachten wir die verschiedenen Argumente, die Sie verwenden können WP_Query und wie du sie kodierst.

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 Tutorial werde ich mir Argumente für die Abfrage von Taxonomie-Begriffen anschauen.

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 sagen WordPress, 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.

Die Taxonomie-Parameter

Das Einstellen von Parametern für Taxonomiebegriffe ist seit der Verwendung etwas komplizierter als für Kategorien und Tags Steuerabfrage. In diesem Argument schreiben Sie ein verschachteltes Array von Argumenten, um die Taxonomie und den Begriff mithilfe der folgenden Parameter anzugeben:

  • Taxonomie (Schnur): Taxonomie.
  • Feld (Schnur): Wählen Sie den Taxonomiebegriff durch ('term_id (Standard), 'Name' oder "Schnecke").
  • Begriffe (int / string / array): Taxonomiebegriff (e).
  • include_children (boolean): Angabe, ob Kinder für hierarchische Taxonomien einbezogen werden sollen oder nicht. Der Standardwert ist "true".
  • Operator (Schnur): Operator zum Testen. Mögliche Werte sind 'IM' (Standard), 'NICHT IN', 'UND'.

Die Tatsache, dass Sie die haben Operator Parameter bedeutet, dass Sie nicht aus einem Bereich verfügbarer Argumente auswählen müssen, um zu definieren, ob Sie Begriffe (wie für Tags und Kategorien) ein- oder ausschließen, sondern verwenden Steuerabfrage stattdessen alles für Taxonomie.

Wenn Sie nach mehreren Taxonomien abfragen möchten, können Sie auch die verwenden Beziehung Parameter vor allen Ihren Arrays (einen für jede Taxonomie) mit UND oder ODER um anzugeben, ob Sie Beiträge mit allen Begriffen oder einer davon finden möchten.

Dies wird am einfachsten mit einigen Beispielen erklärt.

Abfragen für einen Taxonomie-Begriff

Dies ist das einfachste Szenario, bei dem nur ein verschachteltes Array verwendet wird:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => 'my-term-slug',))) ;

Die obigen Abfragen für Beiträge mit der mein-term-slug Begriff in der meine Taxonomie Taxonomie. Beachten Sie, dass Sie auch das verwenden müssen Feld Parameter, um das Feld zu identifizieren, mit dem Sie den Begriff identifizieren, es sei denn, Sie verwenden die Term-ID, die standardmäßig verwendet wird. Wenn Sie die Term-ID verwenden möchten, verwenden Sie Folgendes:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => '11')));

Durch die Verwendung der ID ist es für Sie schwieriger zu bestimmen, wonach Ihre Abfrage zu einem späteren Zeitpunkt gesucht wird. Es werden jedoch potenzielle Probleme vermieden, wenn Sie der Meinung sind, dass Ihre Benutzer den Begriff "Slugs" bearbeiten.

Abfrage nach mehreren Begriffen in einer Taxonomie

Wenn Sie Posts mit einem oder mehreren Terminiarrays in derselben Taxonomie identifizieren möchten, schreiben Sie immer noch ein verschachteltes Array, fügen jedoch ein Array von Termini hinzu.

Zum Beispiel, um Beiträge mit abzufragen irgendein einer Liste von Term-IDs aus Ihrer Taxonomie verwenden Sie:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12')))));

Aber was wäre, wenn Sie Beiträge mit abfragen wollten alles dieser Begriffe? Sie müssen das verwenden Operator Parameter in Ihrem verschachtelten Array:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'AND') ));

Beachten Sie, dass das erste Beispiel tatsächlich die IM Operator, um Beiträge mit einer der Bedingungen zu finden, da dies jedoch die Standardeinstellung ist, müssen Sie sie nicht in Ihren Argumenten angeben.

Ein anderes Szenario ist, wenn Sie nach Beiträgen fragen möchten, die kein Array von Begriffen in einer Taxonomie haben, was Sie folgendermaßen tun:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12')), 'operator' => 'NOT IN' )));

Hier habe ich das ersetzt UND Betreiber mit NICHT IN, Das bedeutet, WordPress findet Beiträge ohne die Begriffe im Array.

Wenn Sie lieber Slugs anstelle von Term-IDs verwenden, können Sie dies mit jedem dieser Szenarien tun. Das letzte Beispiel würde so aussehen:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => array ('my-slug', 'your- Slug '),' operator '=>' NOT IN ')));

Ein anderes Szenario ist, wenn Sie nach Beiträgen fragen möchten, die einen Begriff haben, aber keinen anderen. Dies verwendet die IM Operator (den Sie nicht als Standard angeben müssen), mit einem Minuszeichen vor der ID der Begriffe, die Sie ausschließen möchten:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '-12')))));

Hiermit werden Beiträge mit der Laufzeit 11, aber nicht mit der Laufzeit 12 abgerufen.

Abfrage von Begriffen aus mehreren Taxonomien

Wenn Sie mit mehr als einer Taxonomie arbeiten möchten, müssen Sie mehr als ein Array erstellen. Schauen wir uns das einfachste Beispiel an, um Beiträge mit einem Begriff aus der Taxonomie1 abzufragen und ein Begriff aus Taxonomie2:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1'), 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Hier habe ich zwei verschachtelte Arrays geschrieben: eines für jede Taxonomie, wobei dieselben Argumente verwendet wurden wie für die Beispiele, wobei nur eine Taxonomie verwendet wurde. Ich habe diese mit der vorangegangen Beziehung Streit. Sie müssen das angeben Beziehung Argument, um WordPress mitzuteilen, ob es nach allen oder einigen Beiträgen sucht, die von jedem Array ausgegeben werden. Das funktioniert wie folgt:

  • Wenn du benutzt 'Relation' => 'AND', WordPress ruft die im ersten Array angegebenen Beiträge ab und das zweite Array. Also im obigen Beispiel nur Beiträge mit beide das slug-one einstecken Taxonomie1 und das Schnecke zwei einstecken Taxonomie2 wird abgefragt.
  • Wenn du benutzt 'beziehung' => 'ODER', WordPress ruft Beiträge ab, die vom ersten Array ausgegeben werden oder das zweite Array. In diesem Fall erhalten Sie also Beiträge mit entweder das slug-one Schnecke oder die Schnecke zwei Schnecke (oder beides).

Dies ist der Code, den Sie verwenden würden, wenn Sie nach Posts mit einem der beiden Slugs suchen:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1'), 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Sie können auch nach mehr als einem Begriff in einer bestimmten Taxonomie suchen, indem Sie ihn dem Array hinzufügen:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1'), 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ',' slug-three '))));

Durch die Kombination der Beziehung Argument mit verschachtelten Abfragen auch mit Operator Argument können Sie ziemlich komplexe Abfragen erstellen. Die folgenden Argumente würden Beiträge mit einem Begriff aus einer Taxonomie, aber ohne einen Begriff aus einer anderen Taxonomie abfragen:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1'), 'field' => 'slug', 'terms' => array ('slug -one '),' operator '=>' NOT IN '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ')) ));

Beachten Sie, dass ich verwendet habe 'Relation' => 'AND' hier: wenn ich gebraucht habe ODER, Es würde Beiträge mit abfragen Schnecke zwei und Beiträge ohne slug-one, anstatt Beiträge, die haben Schnecke zwei aber nicht slug-one, was ich suche. 

Es ist denkbar, dass Sie dies weiter ausführen können, um die Begriffe Ihrer Taxonomie nach Ihren Wünschen abzufragen: Verwenden der Operator Argument in beiden geschachtelten Abfragen oder Hinzufügen einer zusätzlichen geschachtelten Abfrage zu Abfragebegriffen in einer anderen Taxonomie.

Ein Hinweis zum Steuerargument

Sie fragen sich vielleicht, warum ich das nicht aufgenommen habe MwSt Argument, wo Sie einfach Ihr Argument wie folgt schreiben:

$ args = array ('taxonomy1' => 'slug-one');

Diese Art der Abfrage von Taxonomien ist Ihnen vielleicht bekannt, wenn Sie dies in der Vergangenheit getan haben, aber es ist jetzt veraltet und sollte nicht verwendet werden. Also bleib bei 'tax_query'! Verwenden Steuerabfrage gibt Ihnen ohnehin viel mehr Flexibilität.

Zusammenfassung

Die Abfrage von Taxonomien ist etwas komplizierter als Kategorien und Tags, da Sie sich mit der Steuerabfrage Streit.

Wie wir gesehen haben, ist dies jedoch ein sehr mächtiges Argument, das Ihnen viel Spielraum und Flexibilität gibt, um Ihre Datenbank auf beliebige Weise abzufragen.