In dieser Serie auf WP_Query
, Sie haben gelernt, wie man das benutzt WP_Query
Klasse, um benutzerdefinierte Abfragen in Ihren Designdateien oder Plugins zu erstellen.
In diesem Teil der Serie werden Sie durch die Argumente geführt, mit denen Sie sowohl einfache als auch komplexe Datumsabfragen erstellen können, um Beiträge auszugeben, die vor, nach oder zwischen einem bestimmten Datum veröffentlicht wurden.
Ich zeige Ihnen, welche Parameter Ihnen zur Verfügung stehen und wie Sie diese verwenden, um Ihre Abfragen zu schreiben. Aber zuerst eine Erinnerung daran, wie Argumente funktionieren 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:
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.
Sie können Parameter auch verwenden, um Beiträge mit einem Veröffentlichungsdatum an einem bestimmten Datum abzufragen. Sie können mit Datumsangaben so genau wie Sie möchten, z. B. Jahre und Monate verwenden, um mehrere Beiträge abzurufen.
Sie können einen einfachen Satz von Argumenten schreiben oder verwenden date_query
geschachtelte Arrays erstellen und komplexere Abfragen ausführen. Beginnen wir mit den einfacheren Argumenten.
Die Parameter, die Sie zur Abfrage nach Datum verwenden können, sind:
Jahr
(int): Vierstellige Jahreszahl (z. 2015
).Monthnum
(int): Monatsnummer (von 1
zu 12
).w
(int): Woche des Jahres (ab 0
zu 53
). Der Modus ist abhängig von der "start_of_week"
Option, die Sie auf der Seite "Einstellungen" im Administrator bearbeiten können.Tag
(int): Tag des Monats (von 1
zu 31
).Stunde
(int): Stunde (von 0
zu 23
).Minute
(int): Minute (von 0
zu 60
).zweite
(int): Zweite (0
zu 60
).m
(int): YearMonth (z. 201502
).Stellen Sie sich vor, Sie betreiben eine Ereignisseite, die das Veröffentlichungsdatum für jedes Ereignis verwendet, um das Startdatum des Ereignisses anzugeben. Um alle vergangenen und zukünftigen Ereignisse des Jahres 2015 anzeigen zu wollen, finden Sie hier die erforderlichen Argumente:
$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => '2015');
Beachten Sie, dass ich verwendet habe Zukunft
und veröffentlichen
Für den Post-Status werden Posts, die für ein zukünftiges Datum geplant sind, nicht standardmäßig abgefragt.
Wenn Sie Ereignisse dieses Jahr automatisch anzeigen möchten und Ihre Abfrage nicht jedes Jahr aktualisieren möchten, können Sie zunächst das aktuelle Jahr abrufen und dieses dann in Ihren Abfrageargumenten übergeben:
$ current_year = the_date ('Y'); $ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);
Um mehrere Datumsparameter zu verwenden, um komplexere Abfragen zu erstellen, verwenden Sie die date_query
Parameter. Dadurch haben Sie Zugriff auf weitere Parameter:
Jahr
(int): Vierstellige Jahreszahl (z. 2015
).Monat
(int): Monatsnummer (von 1
zu 12
).Woche
(int): Woche des Jahres (ab 0
zu 53
).Tag
(int): Tag des Monats (von 1
zu 31
).Stunde
(int): Stunde (von 0
zu 23
).Minute
(int): Minute (von 0
zu 59
).zweite
(int): Zweite (0
zu 59
).nach dem
(Zeichenfolge / Array): Datum, an dem Beiträge abgerufen werden sollen. Vor
(Zeichenfolge / Array): Datum, um Beiträge vor dem Abrufen abzurufen. inklusive
(boolean): Für nach / vor, ob der genaue Wert übereinstimmen soll oder nicht.vergleichen Sie
(Schnur): Ein Operator, mit dem Sie Daten in der Datenbank mit Ihren Argumenten vergleichen. Mögliche Werte sind '='
, '! ='
, ">"
, '> ='
, '<'
, '<='
, 'MÖGEN'
, 'NICHT WIE'
, 'IM'
, 'NICHT IN'
, 'ZWISCHEN'
, 'NICHT ZWISCHEN'
, 'EXISTS'
, und 'EXISTIERT NICHT'
.Säule
(Schnur): Datenbankspalte, gegen die abgefragt werden soll: Der Standardwert ist 'nach Datum'
.Beziehung
(Schnur): ODER
oder UND
, wie die Sub-Arrays verglichen werden sollen. Der Standardwert ist UND
.Das date_query
Parameter ist wie folgt formatiert:
$ args = array ('date_query' => array (array (// Argumente gehen hierher.))));
Sie können auch mehrere Arrays erstellen und mithilfe des Relations-Parameters definieren, wie sie miteinander verglichen werden. Das folgende Beispiel gibt Abfragen zurück, die den Argumenten in beiden Arrays entsprechen:
$ args = array ('date_query' => array ('relation' => 'AND', array (// Argumente gehen hierher.), array (// Argumente gehen hier.)));
Während der folgende Code Beiträge abruft, die mit den Argumenten in einem der Arrays (oder beiden) übereinstimmen:
$ args = array ('date_query' => array ('relation' => 'OR', array (// Argumente gehen hierher.), array (// Argumente gehen hier.)));
Lassen Sie uns dies an einem Beispiel veranschaulichen. Angenommen, Sie arbeiten an einer College-Website und möchten Beiträge aus diesem akademischen Jahr anzeigen. Das akademische Jahr läuft vom 1. September 2014 bis zum 31. August 2015. Sie müssen also Stellen in den relevanten Monaten und Jahren suchen:
$ args = array ('date_query' => array ('relation' => 'OR', array ('year' => '2014', 'month' => ('9, 10, 11, 12')), Array ('year' => '2015', 'month' => ('1, 2, 3, 4, 5, 6, 7, 8'))));
Notiere dass der Monat
Parameter nimmt einen String für seine Argumente und kein Array an.
Eine Alternative zum obigen Beispiel besteht darin, die Datumsangaben vor und / oder nach denen Sie Beiträge anzeigen möchten, mithilfe von zu definieren Vor
und nach dem
Parameter. Dafür gibt es drei Argumente:
Jahr
(Schnur): Akzeptiert jedes vierstellige Jahr: standardmäßig leer.Monat
(Schnur): Der Monat des Jahres (1
zu 12
). Der Standardwert ist 12
.Tag
(Schnur): Der Tag des Monats (1
zu 31
). Der Standardwert ist der letzte Tag des Monats.Sie können auch eine Zeichenfolge für das Datum verwenden, sofern diese mit dem PHP kompatibel ist strtotime
Format.
Um auf mein Beispiel der Anzeige von Beiträgen für dieses Studienjahr zurückzukommen, habe ich zwei weitere Möglichkeiten. Erstens könnte ich ein verschachteltes Array mit den Jahres- und Monatsparametern verwenden:
$ args = array ('date_query' => array ('relation' => 'AND', array ('after' => array ('year' => '2014', 'month' => '9'), ' inklusive '=> true), array (' before '=> array (' year '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true))));
Hier sind einige Dinge zu beachten:
'Relation' => 'AND'
weil die Beiträge nach meinem Startdatum veröffentlicht worden sein müssen und vor meinem Enddatum.'inklusive' => wahr
um sicherzustellen, dass WordPress die im September 2014 und August 2015 veröffentlichten Beiträge abruft.Ich könnte diese Abfrage auch mit einem String für die Datumsangaben schreiben:
$ args = array ('date_query' => array (array ('after' => '31. August 2014', 'before' => '1. September 2015', 'inclusive' => false,))));
Beachten Sie, dass aufgrund der Funktionsweise von Datumszeichenfolgen die Verwendung exklusiver Datumsangaben zuverlässiger ist. Wenn Sie eine Datumszeichenfolge verwenden, wird diese an diesem Datum in 00:00 konvertiert. Damit es funktioniert, verwenden Sie entweder die Zeit in Ihrer Zeichenfolge oder tun Sie, wie ich es getan habe, und nutzen Sie den Tag Vor das Datum, an dem Sie Beiträge anzeigen möchten (und nach dem Datum, an dem Sie Beiträge anzeigen möchten).
Mit Datumsparametern können Sie jedoch auch die heute veröffentlichten Beiträge anzeigen. Zurück zu meiner Veranstaltungsseite. Angenommen, ich möchte an dem Tag, an dem ein Ereignis stattfindet, ein großes Banner auf meiner Homepage anzeigen. Ich kann dazu eine Abfrage schreiben und dann Details des Ereignisses ausgeben, wenn eines gefunden wird. Hier sind die Argumente:
$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'date_query' => array (array ('year' => date ('Y')) , 'Monat' => Datum ('M'), 'Tag' => Datum ('D'))));
Verwendung der Datum()
Funktion gibt das aktuelle Datum zurück. Ich habe dies dreimal verwendet, um sicherzustellen, dass Tag, Monat und Jahr korrekt sind. Beachten Sie, dass ich auch die aufgenommen habe Poststatus
Argument, um sicherzustellen, dass ein Ereignis, das heute stattfindet, enthalten ist.
Manchmal möchten Sie nicht nur alle veröffentlichten Beiträge abfragen. Mit der WP_Query
In dieser Klasse können Sie spezifischere Abfragen erstellen, um Beiträge nach Datum auszugeben, einschließlich der Beiträge, die Sie an einem bestimmten Datum, vor einem Datum, nach einem Datum oder zwischen einem Datumspaar veröffentlicht haben.
Das date_query
Argumente kombinieren sich mit anderen Parametern wie Poststatus
, was an anderer Stelle in dieser Serie ausführlicher behandelt wird.