Verwendung von WordPress für die Entwicklung von Webanwendungen Features Benutzerdefinierte Abfragen mit WP_Query

Wir haben untersucht, wie WordPress als Grundlage für die Anwendungsentwicklung verwendet werden kann, aber eines der Dinge, die wir in den meisten modernen Frameworks noch abdecken müssen, ist das Abfragen der Datenbank, um Ergebnisse für eine bestimmte Ansicht abzurufen.

Insbesondere haben wir nicht darüber gesprochen, wie Informationen aus der Datenbank abgerufen und in unsere Seiten eingefügt werden können.

Wenn Sie mit anderen Frameworks vertraut sind, sind Sie wahrscheinlich mit einem objektrelationalen Mapping-System (ORM) vertraut..

Für diejenigen, die mit einem ORM nicht vertraut sind, handelt es sich im Wesentlichen um eine Software, die sich zwischen der Anwendung und der Datenbank befindet und Zeilen und Spalten als Objekte abrufen, sie als solche behandeln und ihre Änderungen zurücksetzen kann in die Datenbank.

Es ist wirklich cooles Zeug. WordPress tut dies jedoch nicht bieten diese Flexibilität.

Stattdessen gibt es eine Reihe von APIs, die es ermöglicht, Änderungen an der Datenbank vorzunehmen. Es gibt eine Reihe von APIs, die wir verwenden können. Jede davon wird in diesem letzten Satz von Artikeln untersucht.

Zuerst schauen wir uns das an WP_Query. Dann schauen wir uns mal an WP_User_Query, gefolgt von der $ wpdb Objekt, das als verfügbar ist global in WordPress.

Aber dazu später mehr. Nun zu weiter WP_Query.


Abfragen der WordPress-Datenbank

Bevor wir uns tatsächlich mit dem Abfragen der WordPress-Datenbank beschäftigen, denke ich, dass es wichtig ist, genau zu beschreiben, was dies bedeutet, warum es wichtig ist und was es bedeutet.

Dies ist nicht zuletzt das Ziel, die Erwartungen der Leser unabhängig von Ihrem Erfahrungsniveau zu stufen.

1. Was bedeutet das??

Das Abfragen der WordPress-Datenbank stellt genau das dar, was Sie erwarten würden: Abrufen von Informationen aus der Datenbank, auf denen WordPress ausgeführt wird.

Es ist nichts schrecklich kompliziert. Aber dort sind Es gibt mehrere Möglichkeiten, dies zu tun, und es ist wichtig zu wissen, wie es geht und was zu vermeiden ist.

Im Allgemeinen gibt es drei APIs, die verfügbar sind und von uns empfohlen werden, und einige, die verfügbar sind, aber es gibt nicht zur Verwendung empfohlen.

In dieser Artikelserie werden wir all das behandeln.

2. Warum ist das wichtig??

Nicht zuletzt ist dies wichtig, damit wir die richtigen Methoden verstehen, um Informationen auf die sicherste und sicherste Weise abzurufen und in der Datenbank zu speichern.

Denken Sie daran: Nur weil etwas funktioniert, heißt das nicht, dass dies der beste Weg ist.

Zu diesem Zweck werden wir uns die empfohlenen Methoden ansehen, die WordPress bietet, um Daten direkt von und in die Datenbank abzurufen und zu speichern.

Schließlich möchten wir sicherstellen, dass wir nicht nur robuste Anwendungen, sondern auch sichere und effiziente Anwendungen erstellen.

3. Was bedeutet das??

Wie bei den meisten Dingen erfordert es das Erlernen einer API. Zumindest ist dies bei zwei Abfragetypen der Fall.

Für den abschließenden Artikel ist es erforderlich, dass Sie SQL (als WordPress) kennen oder bereit sind, zu lernen tut erlauben Sie, rohe Abfragen gegen die Datenbank zu schreiben). Aber dazu später mehr.

Im Moment konzentrieren wir uns einfach auf die APIs, die verfügbaren Parameter und wie und wann sie in unserer Arbeit verwendet werden sollen.


WP_Query wird vorgestellt

Obwohl Sie alles darüber lesen können WP_Query Im WordPress-Codex halte ich es für sinnvoll, einige der Feinheiten in diesem Artikel herauszustellen, insbesondere Wenn Sie WordPress noch nicht kennen oder ernsthaft über das Schreiben von Anwendungen mit WordPress nachdenken.

Der Kodex definiert WP_Query wie die folgenden:

WP_Query ist eine Klasse, die sich mit den Feinheiten einer Postanforderung (oder Seitenanforderung) an ein WordPress-Blog beschäftigt. Die Datei wp-blog-header.php… enthält die Objektinformationen für das Objekt $ wp_query, die die aktuelle Anforderung definieren, und dann bestimmt $ wp_query, um welche Art von Abfrage es sich handelt (möglicherweise ein Kategorienarchiv, ein datiertes Archiv, ein Feed oder eine Suche), und die Abfrage abgerufen angeforderte Beiträge. Es enthält viele Informationen zu der Anforderung, die zu einem späteren Zeitpunkt abgerufen werden können.

Unglaublich technisch, richtig?

So denken Sie aus der Perspektive des Verbrauchers nach:

  • WP_Query ruft Informationen zu Beiträgen, Seiten, anderen benutzerdefinierten Beitragstypen und archivierten Daten ab und stellt die angeforderten Informationen zu diesen Daten zur Verfügung.

Betrachten Sie es aus der Entwicklungsperspektive so:

  • WP_Query ist eine Möglichkeit, Informationen über Post-Typen und archivierte Daten sowie die zugehörigen Metadaten abzurufen. Die abgerufenen Informationen können dann in Vorlagendateien gelesen, bearbeitet, gespeichert und / oder angezeigt werden.

Zusamenfassend, WP_Query bietet eine Standardmethode für die Abfrage der Datenbank speziell nach Beiträgen, Seiten, benutzerdefinierten Beitragstypen und den zugehörigen Metadaten, damit wir einfacher mit den in WordPress gespeicherten Informationen arbeiten können.

Hinweis: Wenn Sie nach Informationen zum Verwalten von Benutzern oder zum Erstellen benutzerdefinierter SQL-Abfragen suchen, warten Sie bis zum nächsten Satz von Artikeln, da diese Informationen zu diesem Zeitpunkt ausführlicher behandelt werden.

So verwenden Sie WP_Query

Okay, wir haben gedeckt Was WP_Query ist, warum es vorteilhaft ist und wie es verwendet werden sollte, aber das geht nur so weit.

An diesem Punkt ist es an der Zeit, einen Blick darauf zu werfen, an welche Parameter übergeben werden können WP_Query und einige praktische Beispiele, wie man es benutzt.

Zuerst, WP_Query Argumente für: Autoren, Kategorien, Tags, Taxonomien, generische Suchabfragen, Beiträge, Seiten, benutzerdefinierte Beitragstypen, Status, Paginierung, Reihenfolge der Einträge, Datumsangaben, benutzerdefinierte Felder, Berechtigungen, Zwischenspeicherung und Rückgabefelder.

Kurz gesagt, alles, was sich auf Posttypen, ihre Kategorien-Tags und ihre Metadaten bezieht, kann mit abgerufen werden WP_Query.

Ein Wort über die Schleife

Wenn Sie sich einen WordPress-Theme-Code angesehen haben oder vor dem Lesen dieses Artikels in irgendeiner Form mit WordPress gearbeitet haben, ist es sehr wahrscheinlich, dass Sie Code wie diesen gesehen haben:

  

Und in WordPress ist das, was als The Loop bekannt ist.

Kurz gesagt, in The Loop geschieht alles, wenn es um das Anzeigen von Informationen geht, die aus einer Abfrage abgerufen wurden.

Zu diesem Zweck, wenn Sie eine Abfrage mit schreiben WP_Query, dann werden Sie wahrscheinlich dieselbe Struktur für Ihre eigene Arbeit verwenden.

Aber wir werden gleich mehr darüber erfahren.

Praktische Beispiele

Anfangen mit WP_Query ist einfach. Angenommen, wir möchten eine Vorlage einrichten, in der alle Beiträge eines einzelnen Autors angezeigt werden.

Dazu können wir die ID des Autors verwenden. Nehmen wir an, wir möchten alle Beiträge, Seiten und Inhalte abrufen, die vom Autor mit der ID "1" geschrieben wurden.

  1); $ my_query = new WP_Query ($ args);

Und dann wollen wir es durchlaufen:

 if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) // Arbeit mit dem Beitrag von Autor 1) // // Wir werden später im Artikel über diese nächste Zeile sprechen. wp_reset_postdata (); 

Leicht genug, richtig?

Aber machen wir es etwas komplizierter. Angenommen, wir möchten nur die Beiträge dieses Autors abrufen, die unter den benutzerdefinierten Typ "Fotografie" fallen und die 2013 veröffentlicht wurden.

Dazu geben wir diese Informationen weiter:

  1 'post_type' => 'Fotografie' date_query '=> Array (' 2013 ')); $ my_query = neue WP_Query ($ args);

Und dann durchlaufen Sie die Abfrage wie folgt:

 if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) // Arbeit mit den zurückgegebenen Beiträgen // Wir werden später im Artikel über diese nächste Zeile sprechen. wp_reset_postdata (); 

Es kann jedoch etwas komplexer werden, je nachdem, welche Informationen wir zu einem bestimmten Zeitpunkt im Lebenszyklus der Anwendung zur Verfügung haben.

Angenommen, wir möchten programmgesteuert einen benutzerdefinierten Beitragstyp mit einem bestimmten Titel und Slug erstellen, aber nur wenn einer noch nicht existiert.

Dafür gibt es drei Schritte:

  1. Übergeben Sie die erforderlichen Argumente an die Klasse
  2. Durchlaufen Sie die Schleife und suchen Sie nach eventuell vorhandenen Beiträgen
  3. Wenn der Beitrag nicht vorhanden ist, erstellen Sie ihn

So geht's:

 // Suchen Sie nach dem angegebenen Beitragstyp und Slug, die veröffentlicht wurden oder sich im Papierkorb befinden. $ Args = array ('post_type' => $ post_type, 'post_name' => $ slug, 'post_status' => array ('publish', 'Müll' ) ); $ post_type_query = new WP_Query ($ args); // Ein Post mit diesen Informationen ist bereits vorhanden, dann wird er aus dem Papierkorb entfernt. If ($ post_type_query-> have_posts ()) while ($ post_type_query-> have_posts ()) $ post_type_query-> the_post (); // Wenn der Beitrag im Papierkorb gefunden wird, stellen Sie ihn wieder her, wenn ('Papierkorb' == strtolower (get_post_status (get_the_ID ()))) $ page = get_page (get_the_ID ()); $ page-> post_status = 'publish'; wp_update_post ($ page);  // Wenn mit dem angegebenen Titel noch kein Beitrag vorhanden ist, erstellen Sie ihn, wenn (null == acme_get_permalink_by_slug ($ slug, $ post_type)) $ page_id = wp_insert_post (array ('comment_status' => 'closed') , 'ping_status' => 'closed', 'post_author' => 1, // Der Administrator erstellt die Seite 'post_title' => $ title, 'post_name' => strtolower ($ slug), 'post_status' => ' ',' post_type '=> strtolower ($ post_type))); // Wenn in den Funktionsargumenten eine Vorlage angegeben ist, wenden wir sie an, wenn (null! = $ Template) update_post_meta (get_the_ID (), '_wp_page_template', $ template);  // Wir sprechen später im Artikel über diese Zeile. Wp_reset_postdata ();

Wie Sie sehen, können Sie einige wirklich mächtige Abfragen machen und einige wirklich clevere Arbeit mit WordPress und durchführen WP_Query wenn Sie wissen, wie Sie die Parameter richtig behandeln.

Nun, im obigen Code, wenn wir suchen, ob der Beitrag bereits im Papierkorb vorhanden ist sind optimalere Möglichkeiten, eine Abfrage zu schreiben, um dies zu überprüfen; Der obige Code soll jedoch ein Beispiel dafür zeigen, wie man ihn benutzt WP_Query als alles andere.

Wenn wir uns weiter mit dem Thema "Abfragen schreiben" beschäftigen, werden wir andere Wege finden, um Informationen schneller abzurufen (z. B. die Verwendung von Raw SQL für WÄHLEN Aussagen und LÖSCHEN oder AKTUALISIEREN Aussagen).

Zu diesem Zweck empfehle ich Ihnen, sich mit allen Parametern vertraut zu machen, die es akzeptiert. Obwohl es viele Optionen gibt (was meiner Meinung nach eine gute Sache ist), gibt es eine relativ übliche Art, diese zu umgehen, so dass viele von ihnen dieselbe Leistung erbringen wie andere.

Das heißt, sobald Sie ein paar von ihnen gelernt haben, können Sie den Rest leicht aufgreifen.

Wenn Sie die Abfragen wirklich ein bisschen besser verstehen möchten, empfehle ich Ihnen, einen Blick darauf zu werfen, wie die Parameter den Daten in der zugrunde liegenden Datenbank entsprechen.

Wann wird WP_Query verwendet?

Dies wirft natürlich die Frage nach wann solltest du verwenden WP_Query.

Schließlich verfügt WordPress über eine eigene Vorlagenhierarchie. Wenn Sie also mit einer Datei arbeiten, die in diese Hierarchie passt, wird automatisch eine Abfrage verwendet, die sich auf diesen Vorlagentyp bezieht.

Wenn Sie jedoch Anwendungen oder sogar fortgeschrittene WordPress-Designs erstellen, müssen Sie Vorlagen erstellen, die nicht in die Hierarchie passen und daher einen eigenen Satz von Abfragen benötigen.

Das ist eine Möglichkeit, die Sie verwenden müssen WP_Query.

Zweitens, wenn Sie einen benutzerdefinierten Satz von Informationen zurückziehen möchten - entweder einteilig oder mehrere Teile - für einen bestimmten Beitrag, eine Seite, einen benutzerdefinierten Beitragstyp, eine Kategorie, eine Taxonomie usw. WP_Query ist wohl die beste Option.

Ein Wort zum Zurücksetzen der Abfrage

Es gibt einen groß hast du zu benutzen WP_Query Das ist der Schlüssel, um Ihr Verständnis der API abzurunden wp_reset_postdata ().

So wie der Codex beschreibt:

Verwenden Sie diese Funktion, um die globale Variable $ post der Hauptabfrageschleife nach einer sekundären Abfrageschleife mit dem neuen WP_Query wiederherzustellen. Es stellt die Variable $ post im aktuellen Beitrag in der Hauptabfrage wieder her.

Aufgrund dessen, wie WordPress Informationen unterhält global Variablen, es ist wichtig, dass Sie Ihre eigenen erstellt, ausgeführt und verarbeitet haben WP_Query, Sie müssen dann diese bestimmte Funktion aufrufen, um die Informationen in dem Zustand wiederherzustellen, in dem sie sich vor dem Ausführen Ihrer eigenen Abfrage befanden.

Dies ist so, dass WordPress weiterhin Informationen durchläuft, die in der Vorlagenhierarchie benötigt werden, und dass Daten beim Rendern von Inhalt auf einer Seite oder auf einer anderen Seite nicht beschädigt werden oder verloren gehen.


Next Up, WP_User_Query

Ob WP_Query Für die Erstellung effizienter, sicherer Abfragen nach Beitragstypen und den zugehörigen Attributen ist es äußerst wichtig, wie wir dies für Benutzer tun?

Schließlich haben wir bereits festgestellt, dass WordPress standardmäßig hervorragende Funktionen für die Kontenverwaltung bietet. Wir haben jedoch nicht die Möglichkeiten besprochen, wie wir Benutzer durch Abfragen der Datenbank verwalten können.

Im nächsten Artikel schauen wir uns genau das an. Und wenn Sie sich damit auskennen WP_Query - was Sie nach dem Lesen dieses Artikels sein sollten - dann werden Sie den nächsten Artikel sehr leicht zu folgen finden.