In diesem Teil dieser Serie über WP_Query
, Du lernst zu benutzen WP_Query
zum Abfragen von Beiträgen, Seiten und benutzerdefinierten Beitragstypen. Sie können nach bestimmten Beiträgen und Seiten suchen oder eine Abfrage ausführen, um Beiträge eines oder mehrerer Beitragstypen zurückzugeben.
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.
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.
Beginnen wir mit dem einfachsten Szenario: Ausführen einer Abfrage, um einen bestimmten Beitrag oder eine bestimmte Seite zu finden.
Um einen bestimmten Beitrag (oder einen Satz von Beiträgen) zu finden, haben Sie zwei Möglichkeiten:
p
(int): Verwenden Sie die Post-ID.Name
(Schnur): Verwenden Sie Post Slug.Sie können diese Parameter für jeden Beitragstyp verwenden, einschließlich Beiträge, Seiten, Anhänge und benutzerdefinierte Beitragstypen. Standardmäßig fragt WordPress nach 'Post'
Post-Typ und nicht Rückgabe von Seiten oder benutzerdefinierten Post-Typen. Wenn Sie dies tun möchten, müssen Sie weitere Argumente hinzufügen oder ein anderes Argument verwenden, auf das ich später in diesem Lernprogramm eingehen werde.
Um einen bestimmten Beitrag zurückzugeben, würden Sie eine der folgenden verwenden:
$ args = array ('p' => '32');
oder:
$ args = array ('name' => 'post_slug');
Notiere dass der Name
Parameter nimmt den Post-Slug als Argument an, nicht sein Titel.
Verwendung der Name
Mit diesem Parameter können Sie leichter feststellen, was Ihre Abfrage von der Datenbank abruft, wenn Sie Ihren Code zu einem späteren Zeitpunkt erneut aufrufen. Es besteht jedoch das Risiko, dass die Abfrage nicht funktioniert, wenn einer der Benutzer Ihrer Site den Post-Slug-Code ändert. Die Post-ID kann nicht geändert werden. Dies ist sicherer.
Um eine bestimmte Seite abzufragen, haben Sie wieder zwei Optionen:
page_id
(int): Verwenden Sie die Seiten-ID.Seitenname
(Schnur): Verwenden Sie das Seitenfenster.Um eine Abfrage auszuführen, die nur eine bestimmte Seite aus der Datenbank abruft, würden Sie eine der folgenden verwenden:
$ args = array ('page_id' => '20');
oder:
$ args = array ('pagename' => 'page_slug');
Um eine Abfrage für einen Beitrag eines anderen Beitragstyps auszuführen, einschließlich eines benutzerdefinierten Beitragstyps, verwenden Sie auch die Post-Typ
Parameter. Ich werde dies später in diesem Tutorial etwas ausführlicher behandeln, aber in Kürze, um einen einzelnen Beitrag in der Produkt
benutzerdefinierten Beitragstyp, würden Sie Folgendes verwenden:
$ args = array ('p' => '46', 'post_type' => 'product');
Oder um eine Anlage abzufragen, verwenden Sie:
$ args = array ('p' => '46', 'post_type' => 'attachment');
In manchen Fällen müssen Sie möglicherweise alle Seiten abrufen, die untergeordnete Elemente einer bestimmten Seite sind, z. B. wenn Ihre Site über eine hierarchische Seitenstruktur verfügt und Sie auf jeder Seite der untergeordneten Elemente dieser Seite eine Liste anzeigen möchten.
Hinweis: Sie würden dies nicht mit Posts tun, da sie nicht hierarchisch sind, obwohl dies mit einem benutzerdefinierten Beitragstyp möglich ist, wenn er hierarchisch ist.
Sie haben drei Argumente, die Sie dazu verwenden können:
post_parent
(int): Verwenden Sie die Seiten-ID, um nur untergeordnete Seiten zurückzugeben. Auf 0 setzen, um nur Einträge der obersten Ebene zurückzugeben.post_parent__in
(Array): Verwenden Sie ein Array von Post-IDs.post_parent__not_in
(Array): Verwenden Sie ein Array von Post-IDs.Lassen Sie uns einen Blick auf jeden von ihnen werfen.
Der Erste, post_parent
, können Sie Seiten abfragen, die untergeordnete Elemente einer bestimmten Seite sind.
Um alle Seiten zu finden, die einer bestimmten Seite untergeordnet sind, verwenden Sie Folgendes:
$ args = array ('post_type' => 'page', 'post_parent' => '2');
Beachten Sie, dass Sie das angeben müssen Post-Typ
Argument als Standardpostart das WP_Query
sucht nach ist Post
.
Wenn Sie dies weiter ausführen, verwenden Sie es, um untergeordnete Elemente der aktuellen Seite zu finden:
$ current_page_id = get_the_ID (); $ args = array ('post_type' => 'page', 'post_parent' => $ current_page_id);
Sie können diesen Parameter auch verwenden, um Seiten der obersten Ebene zu identifizieren, d. H. Solche ohne übergeordnetes Element:
$ args = array ('post_type' => 'page', 'post_parent' => '0');
Was aber, wenn Sie Kinder mehrerer Seiten identifizieren möchten? Das können Sie auch mit der post_parent__in
Parameter. Dies erfordert ein Array von Post-IDs.
Um nach den untergeordneten Elementen von zwei Ihrer Seiten zu suchen, verwenden Sie Folgendes:
$ args = array ('post_type' => 'page', 'post_parent__in' => array ('2', '4'));
Sie können auch untergeordnete Seiten aus der Abfrage ausschließen post_parent__not_in
Parameter:
$ args = array ('post_type' => 'page', 'post_parent__not_in' => array ('2', '4'));
Es ist auch üblich, eine Abfrage auszuführen, um mehrere Beiträge entweder ein- oder auszuschließen. Sie haben zwei Argumente, die Sie dafür verwenden können:
post__in
(Array): Verwenden Sie Post-IDs.post__not_in
(Array): Verwenden Sie Post-IDs.Das post__in
Argument kann für alle Post-Typen verwendet werden und nimmt ein Array von IDs auf. Um eine Liste bestimmter Beiträge auszugeben, verwenden Sie Folgendes:
$ args = array ('post__in' => array ('36', '52', '246', '354'));
Hinweis: Wenn Sie dieses Argument zum Abrufen von Beiträgen verwenden, werden von WordPress auch dann wichtige Beiträge abgerufen, auch wenn diese nicht in Ihrer Liste enthalten sind. Um sie wegzulassen, verwenden Sie die ignore_sticky_posts
Streit:
$ args = array ('post__in' => array ('36', '52', '246', '354'), 'ignore_sticky_posts' => 'true');
Das post__not_in
Argument funktioniert auf ähnliche Weise und nimmt wieder ein Array von Post-IDs an, gibt jedoch alles andere aus, außer die aufgelisteten Posts. Normalerweise kombinieren Sie es mit anderen Argumenten, um die Ausgabe einer großen Liste von Beiträgen zu vermeiden.
Also für alle Beiträge der Produkt
Posttyp, aber einige ausschließen:
$ args = array ('post_type' => 'product', 'post__not_in' => array ('36', '52', '246', '354'));
Um dies mit einem unserer früheren Beispiele zu kombinieren, führen Sie die folgenden Anweisungen aus, um alle Seiten der obersten Ebene außer der aktuellen abzufragen:
$ current_page_ids = array (get_the_ID ()); $ args = array ('post_parent' => '0', 'post__not_in' => $ current_page_ids);
Wenn Sie auch einen hierarchischen Beitragstyp registriert haben, müssen Sie den Post-Typ
Parameter in diesem Code, um nur Seiten abzufragen.
In einigen der obigen Beispiele habe ich die verwendet Post-Typ
Parameter, um Beiträge eines bestimmten Typs zu identifizieren. Schauen wir uns die Argumente an, die Sie mit diesem Parameter verwenden können:
Post
: Ein Eintrag.Seite
: Eine Seite.Revision
: Eine Revision.Befestigung
: Ein Anhang.nav_menu_item
: Ein Navigationsmenüpunkt.irgendein
: Ruft jeden Typ außer Revisionen und Typen mit ab 'exclude_from_search'
einstellen wahr
als sie registriert wurden.Produkt
).Wie wir oben gesehen haben, können Sie diesen Parameter mit anderen Argumenten verwenden, um Ihre Abfrage genauer zu machen.
Um ein einfaches Beispiel zu geben, führen Sie die folgenden Abfragen für alle Seiten Ihrer Website durch:
$ args = array ('post_type' => 'page');
Die Abfrage eines benutzerdefinierten Beitragstyps ist einfach: Verwenden Sie den Namen, den Sie bei der Registrierung des Beitragstyps angegeben haben, nicht Der Titel, der in den Admin-Menüs verwendet wird. Nehmen wir an, Sie haben Ihre Produktposttypen mit registriert register_post_type ()
wie folgt:
function register_product () $ args = array ('name' => __ ('Products', 'tutsplus'), 'singular_name' => __ ('Product', 'tutsplus')); register_post_type ('product', $ args);
Der Wert, den Sie für verwenden Post-Typ
Argument bei der Abfrage nach Produkten ist nicht 'Produkt'
oder 'Produkte'
aber 'Produkt'
:
$ args = array ('post_type' => 'product');
Wenn Sie versuchen, eine Abfrage für Anhänge auszuführen, funktioniert dies standardmäßig nicht, da WordPress das festlegt Poststatus
von Anhängen an erben
und WP_Query
Standardeinstellung ist 'post_status' => 'Publizieren'
sofern Sie nichts anderes angeben. Also wenn du nach Anhängen abfragen willst Muss umfassen die Poststatus
Streit:
$ args = array ('post_type' => 'attachment', 'post_status' => 'erben');
Beachten Sie, dass Sie auch verwenden können irgendein
anstatt erben
.
Verwenden WP_Query
benutzerdefinierte Abfragen für Beiträge und Beitragstypen zu erstellen, mache ich oft. Wie Sie anhand der Beispiele hier gesehen haben, gibt es viele Möglichkeiten:
Es gibt viele weitere Möglichkeiten, die hier behandelten Argumente zu verwenden, aber dies sollte Ihnen einen Vorgeschmack geben.