WP_Query-Argumente Beiträge, Seiten und Beitragstypen

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.

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
  • Fertigstellung: Schließen von Tags und Tags und Zurücksetzen der Post-Daten

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.

Abfragen nach einzelnen Posts oder Seiten

Beginnen wir mit dem einfachsten Szenario: Ausführen einer Abfrage, um einen bestimmten Beitrag oder eine bestimmte Seite zu finden.

Abfragen für einen Post

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.

Eine Seite abfragen

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');

Abfragen eines Post eines anderen Typs

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');

Abfragen für untergeordnete Seiten

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'));

Abfragen nach mehreren Posts

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.

Abfragen nach Beitragstypen

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.
  • Benutzerdefinierte Post-Typen (z. 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');

Benutzerdefinierte Beitragstypen

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');

Anlagen

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.

Zusammenfassung

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:

  • Verwenden Sie diese Option, um die Seiten der obersten Ebene Ihrer Site abzufragen.
  • Verwenden Sie diese Option, um Beiträge eines bestimmten Beitragstyps abzufragen.
  • Verwenden Sie es, um nach allen Beiträgen mit Ausnahme der von Ihnen angegebenen Beiträge zu suchen.
  • Verwenden Sie diese Option, um alle untergeordneten Elemente der aktuellen Seite abzufragen.

Es gibt viele weitere Möglichkeiten, die hier behandelten Argumente zu verwenden, aber dies sollte Ihnen einen Vorgeschmack geben.