Nun, da wir fast alles über das Internet gelernt haben WP_Query
Klasse, es ist Zeit einige Beispiele auszuprobieren. In diesem Teil werden wir an 10 verschiedenen Szenarien arbeiten, um das zu nutzen WP_Query
Klasse und verwandte Funktionen.
Es wird eine lustige Übung und ich hoffe, dass es ebenso lehrreich ist. Lass uns anfangen!
Um diesen Artikel getrennt von der "Mastering WP_Query" -Serie zu verstehen, sollte ich ein Nano-Tutorial zum Erstellen von WordPress-Schleifen mit der WP_Query
Klasse.
Es ist nicht anders als das Erstellen einer regulären Schleife. Eine typische WordPress-Schleife sieht folgendermaßen aus:
Und eine Schleife mit dem erstellen WP_Query
Klasse hat nur wenige Unterschiede:
'news', 'posts_per_page' => 3); $ my_query = new WP_Query ($ args); if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Postdaten gehen hier. // Setzen Sie die '$ post'-Daten in der Hauptabfrage auf den aktuellen Beitrag zurück. wp_reset_postdata (); ?>
Sehen wir uns den Unterschied zwischen den beiden an:
WP_Query
Beispiel,WP_Query
Klasse,$ my_query->
zum Anfang des have_posts ()
und die Post()
Funktionen (so sind sie jetzt die Methoden der WP_Query
Klasse),$ post
So kann es zur Hauptabfrage zurückkehren.Jetzt wissen wir, wie man eine Schleife mit erstellt WP_Query
und der Unterschied zwischen einer regulären Schleife und einer mit erstellten Schleife WP_Query
. Wir werden nicht in jedem Beispiel Schleifen erstellen (um das Tutorial kurz und zum Thema zu halten). Sie können sich also auf diesen Abschnitt beziehen, wenn Sie eine Schleife mit den folgenden Beispielen erstellen müssen.
Angenommen, Sie möchten die Beiträge eines bestimmten Autors, die im aktuellen Jahr geschrieben wurden, in einem speziellen Abschnitt "Beiträge dieses Jahres" des Autors auflisten. Eine einfache Kombination von zwei WP_Query
Parameter werden ausreichen:
'john', // Holen Sie sich seine Beiträge aus diesem Jahr. 'year' => $ current_year); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Übergeben Sie diese Abfrage in einer Schleife und Sie können loslegen!
Nehmen wir an, Sie möchten eine Schleife unter jedem Beitrag auf den einzelnen Beitragsseiten erstellen und die neuesten Beiträge aus der Kategorie auflisten, in der sich der Beitrag befindet. Natürlich müssen Sie den aktuellen Beitrag ausschließen, falls es sich um einen der neuesten Beiträge handelt Beiträge aus dieser Kategorie. So erstellen Sie die Abfrage mit der 'Katze'
und 'post__not_in'
Parameter:
term_id; // Argumente einrichten. $ args = array (// Beiträge der Kategorie abrufen. 'cat' => $ current_post_first_cat_id, // Aktuellen Beitrag ausschließen. 'post__not_in' => array ($ current_post_id)); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Für die Schleife empfehle ich die Erstellung von drei oder vier Spalten mit Postminiaturen oberhalb der Posttitel. Es wird unter dem Beitrag und vor den Kommentaren wirklich gut aussehen.
WordPress verfügt nicht über ein integriertes Post-View-Count-System, und Plugins, die diese Funktionalität bieten, sind dafür bekannt, dass die Website langsamer wird (da in jeder Postansicht die Plugins immer wieder in die Datenbank schreiben, um die Ansicht aufzuzeichnen.) zählt). Es gibt jedoch eine andere Art der Messung, um zu ermitteln, welche Posts am beliebtesten sind: das Zählen von Kommentaren. Im Gegensatz zu den Ansichtszählern befinden sich die Kommentarzählungen bereits in der Datenbank WP_Query
Klasse macht es sehr einfach, Beiträge nach Anzahl der Kommentare zu bestellen:
'Anzahl Kommentare' ); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Sehen Sie, wie einfach das ist. Stellen Sie sich nun vor, Sie erstellen eine benutzerdefinierte Seitenvorlage mit einer Schleife, auf der diese Abfrage ausgeführt wird - eine Seite mit den meisten Kommentaren.
Wenn WordPress zum Erstellen von Unternehmenswebsites, Portfolios oder Webmagazinen verwendet wird, sind Schieberegler zu einem unverzichtbaren Industriestandard geworden. Ich bin eigentlich kein Fan von Sliders (ich denke, es ist eine schlechte UX), aber das Web scheint es zu mögen, also kann ich meinen Kunden nicht einfach Nein sagen, während ich Websites für sie mache. Wenn sie Schieberegler wollen, verwende ich eine einfache Abfrage mit der WP_Query
Klasse:
'slider', // Eine bestimmte Slider-Kategorie abrufen. 'category_name' => 'home-slides', // Holen Sie sich alle Folien und paginieren Sie nicht. 'nopaging' => true); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Das 'Katze'
Argument kann verwendet werden, um Folien aus verschiedenen Kategorien abzurufen, sodass Sie Foliengruppen voneinander trennen und mehrere Schieberegler auf mehreren Seiten verwenden können. Wenn Sie nur einen Schieberegler auf Ihrer Website verwenden, können Sie diese Zeile löschen und schon kann es losgehen.
Wenn Sie sich für Literatur oder religiöse Zwecke interessieren, möchten Sie vielleicht einige Ihrer Lieblingszitate in der Seitenleiste haben - es ist keine Verschwendung von Platz, wenn Sie den Bereich mit Zweck verwenden. Wenn Sie also in jeder Seitenansicht ein zufälliges Zitat in Ihrer Seitenleiste auflisten möchten, können Sie den Beitragstyp mit dem folgenden Codeausschnitt erstellen und mit der folgenden Abfrage eine Schleife in Ihrer Seitenleiste erstellen:
'Quotes', 'public' => true); register_post_type ('quotes', $ args); add_action ('init', 'quote_post_type'); // Argumente einrichten. $ args = array (// Liefert den "Anführungszeichen" -Psot-Typ. 'post_type' => 'Anführungszeichen', // Die Reihenfolge wird zufällig festgelegt. 'orderby' => 'rand', // Nur ein Element erhalten > 1,); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Eine einfache und elegante Lösung.
Ich habe dieses Beispiel auf Scribu.net gefunden und muss sagen, es könnte das Beste sein WP_Query
Trick in diesem Tutorial. Es ist auch etwas technischer als die anderen, da es in diesem Zusammenhang auf eine WordPress-betriebene E-Commerce-Website angewendet werden kann.
Hier ist das Code-Snippet, das Sie verwenden möchten, wenn Sie Elemente eines benutzerdefinierten Post-Typs "Product" auflisten und die Ergebnisse mit den benutzerdefinierten "Price" -Feldern filtern möchten:
'product', // Richten Sie die "Meta-Abfrage" ein. 'meta_query' => array (array (// Erhalte das benutzerdefinierte Feld "price". "key" => "price", // Legt die Preiswerte fest. 'value' => array (100, 200), // Set der Vergleichsoperator. 'compare' => 'BETWEEN', // Nur numerische Felder betrachten. 'type' => 'numeric',))); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Ein großes Lob an Silviu-Cristian Burca!
Hier ist eine lustige Übung - und wir können auch die Shortcode-API verwenden! In diesem Beispiel erstellen wir einen Shortcode, der einen Beitrag in einen Beitrag einbetten kann. (Ich habe mich kaum davon abgehalten, den Shortcode zu nennen [postception]
.) Im folgenden Code-Snippet erstellen wir eine Shortcode-Funktion, mit der wir Beiträge (oder jeden benutzerdefinierten Beitragstyp) einbetten können und uns entscheiden können, ob der vollständige Beitrag oder nur ein Auszug angezeigt werden soll:
'post', 'slug' => ", 'full' => true), $ attributes)); // Argumente für das Setup. $ args = array (// Abrufen des Posttyps (standardmäßig" post "). 'post_type' => $ type, // Post per Slug abrufen. 'name' => $ slug); // Neue Abfrageinstanz instanziieren. $ my_query = new WP_Query ($ args); // Überprüfen, ob Abfrageergebnisse vorliegen. if ($ my_query-> have_posts ()) // Beginnen Sie mit der Erstellung von Markup. $ output = ''; // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Titel zur Ausgabe hinzufügen $ output. = ' '; else // Nachricht ausgeben, um den Benutzer mitzuteilen, dass keine Beiträge gefunden wurden. $ output = ''; $ output. = get_the_title (); $ output. = '
'; // Vollständigen Beitrag erhalten, wenn '$ full' wahr ist, andernfalls wird der get-Auszug angezeigt. If ('true' === $ full) // Fügt der Ausgabe vollen Inhalt hinzu. $ output. = ''; $ output. = get_the_content (); $ output. = ''; else // Auszug zur Ausgabe hinzufügen. $ output. = ''; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Vollständiger Beitrag', 'tutsplus'). '' '; $ output. = ''; // Die Erzeugung von Markup beenden. $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>'. __ ('Keine Beiträge gefunden.', 'Tutsplus'). '
'; $ output. = '
Hier eine Idee: Warum zeigen Sie Ihren Besuchern keine "Sneak Peeks" Ihrer bevorstehenden Posts? Sie können die folgende Funktion verwenden, um Ihre geplanten Posts mit oder ohne Ausschnitte nach den Titeln aufzulisten:
* * Verwendung ohne Auszüge: * * * / function tutsplus_show_drafts ($ show_excerpts = true) // Konfigurationsargumente. $ args = array ('post_status' => 'future', 'nopaging' => true); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); // Überprüfen Sie, ob wir Abfrageergebnisse haben. if ($ my_query-> have_posts ()) // Beginnen Sie mit der Erstellung von Markup. $ output = ''; // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Entwurfstext und -auszug des Entwurfs ausgeben (falls aktiviert). $ output. = ' '; else // Benutzer informieren, dass nichts gefunden wurde. $ output = ''; $ output. = ''; // Die Erzeugung von Markup beenden. $ output. = ''. get_the_title (). '
'; $ output. = get_the_title (); $ output. = ''; if ($ show_excerpts) $ output. = ''; $ output. = get_the_excerpt (); $ output. = ''; $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; ?>'. __ ('Nichts gefunden', 'tutsplus'). '
'; $ output. = '
Wenn Ihr Blog älter als ein Jahr ist und Ihr Inhalt zeitlos ist (dh, dass eine Person aus 2015 und 2025 den Artikel für relevant hält), können Sie durch Hinzufügen eines Abschnitts "Heute ein Jahr posten" die Seitenaufrufe verbessern. So machen Sie es:
Datum ('j'), // Monat (1 - 12). 'monthnum' => Datum ('n'), // Jahr (minus 1). 'year' => date ('Y') - 1, // Nur einen Beitrag anzeigen. 'posts_per_page' => 1); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Verwenden Sie diese Abfrage, um eine Schleife zu erstellen, die einen einzelnen Beitrag aus vergangenen Jahren anzeigt.
Sie haben nichts anderes als die Titel der Unterseiten, die Sie in Ihre "Services" -, "Our Works" - oder "My Portfolio" -Seite einfügen können. Vielleicht ein Intro-Absatz, aber Sie haben Recht, diese Seiten sind dazu verdammt, "Platzhalter" zu sein. Dennoch ist es eine gute Idee, Unterseiten dort zu platzieren - vielleicht ein Raster mit quadratischen Miniaturansichten und Titeln darunter. Mal sehen, welche Abfrage wir beim Erstellen einer solchen Seitenvorlage verwenden sollten:
$ current_page_id, // Paginierung deaktivieren. 'nopaging' => true); // Instanziere eine neue Abfrageinstanz. $ my_query = new WP_Query ($ args); ?>
Ich hoffe, dass Ihnen diese Beispiele genauso gut gefallen haben wie bei der Vorbereitung. Ich habe besonderes Augenmerk darauf gelegt, verschiedene Beispiele zu geben, um sowohl Spaß zu machen als auch Ihre Kreativität zu fördern.
Wenn Sie beim Lesen dieser Beispiele an bessere Beispiele gedacht haben oder Fragen haben, zögern Sie nicht, unten einen Kommentar zu schreiben. Und wenn Ihnen der Artikel gefallen hat, vergessen Sie nicht, ihn mit Ihren Freunden zu teilen!
Im nächsten Teil werden wir darüber sprechen WP_User_Query
, eine der Schwesterklassen von WP_Query
. Bis dann!