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.
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:
ob
und während
Tags und Zurücksetzen der PostdatenIn 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.
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.
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.
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.
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.
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:
'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.'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.
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.
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.