Anmelden oder neues Benutzerkonto anlegen.
Doku » Template Tags/query posts
Inhaltsverzeichnis |
[bearbeiten] Beschreibung
Query_posts wird benutzt um festzulegen, welche Beiträge im Loop angezeigt werden. Es werden eine Vielzahl an Parametern akzeptiert, die dem Format der URL identisch sind. (Bsp. p=4 welches nur den Beitrag mit der ID 4 anzeigt.)
Verwendungbeispiele:
- Zeige nur einen Beitrag oder eine Seite auf der Startseite an.
- Zeige alle Beiträge eines bestimmten Zeitraums.
- Zeige die neuesten Beiträge nur auf der Startseite.
- Ändere die Reihenfolge der Beiträge.
- Zeige die Beiträge aus nur einer Kategorie.
[bearbeiten] Verwendung
Bevor der Loop beginnt rufst du query_posts in irgendeiner der Template Seiten auf. query_posts erzeugt dann einen neuen SQL Query mit deinen festgelegten Parametern.
WordPress ignoriert dann die anderen Parameter der URL. (Wie z.B. einer Seiten oder Kategorie Nummer.)
[bearbeiten] Beispiele
[bearbeiten] Eine Kategorie von der Startseite ausschließen
Kommt der folgende Code in die index.php werden auf der Startseite alle Beiträge außer die der Kategorie ID 1 angezeigt.
<?php
if (is_home()) {
query_posts("cat=-1");
}
?>
[bearbeiten] Abfragen einer bestimmten Seite
Um eine bestimmte Seite abzufragen kannst du folgendes benutzen:
<?php
query_posts('page_id=4'); //fragt nur Seite 4 ab
?>
oder
<?php
query_posts('pagename=impressum'); //fragt nur die Seite Impressum ab
?>
[bearbeiten] Das Ausschließen mehrerer Kategorien
Beachte: Du kannst nicht mehr als eine Kategorie mit query_posts ausschließen. Es gibt deshalb einige Plugins oder Abhilfen. Man kann z.B. eine if/else Abfrage im Loop machen und anschließend Kategorien ausfiltern um diese zu ignorieren.
<?php query_posts('cat=-1'); // ausschließen der ersten Kategorie ?>
<?php while (have_posts()) : the_post(); // der Loop wird gestartet ?>
<?php if ( in_category(2) ) {
// Kategorie 2 wird ignoriert, nichts passiert
} else { ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <br />
<?php endif; endwhile; ?>
[bearbeiten] Variablen an query_posts übertragen
Es gibt zwei Methoden eine Variable an das Query zu übertragen - abhängig von deinem Bedarf. Wie bei den anderen Beispielen, kommt das Folgende vor dem Loop:
[bearbeiten] Beispiel 1
In diesem Beispiel verknüpfen wir den Query ehe wir ihn ausführen. Als erstes wird die Variable bestimmt, dann wird sie verknüpft und letztenendes ausgeführt.
<?php $categoryvariable=($cat); // die Variable wird als aktuelle Kategorie bestimmt $query= 'cat=' . $categoryvariable. '&orderby=date&order=ASC'; // die Variable wird nun mit dem Query verknüpft query_posts($query); // der Query wird ausgeführt ?>
[bearbeiten] Beispiel 2
In diesem Beispiel sagen die doppelten " Anführungszeichen " das PHP das Eingeschlossene als Ausdruck behandeln soll. In diesem Beispiel rufen wir den aktuellen Monat im aktuellen Jahr auf und sagen query_posts, dass er uns die jeweiligen Beiträge für das aktuelle Jahr/Monat ausgeben soll. Für die Leserlichkeit werden die Beiträge aufsteigend sortiert - ältester Beitrag oben.
<?php $current_month = date('m'); ?>
<?php $current_year = date('Y'); ?>
<?php query_posts("cat=22&year=$current_year&monthnum=$current_month&order=ASC"); ?>
<!-- Loop -->
[bearbeiten] Posts aller Kategorien abfragen
Das Problem zu diesem Beispiel ergibt sich letztendlich nur, wenn man eine statische Startseite eingerichtet hat, wozu es diverse Plugins gibt. Will man anschließend auf einer eigenen Übersichtsseite eine Übersicht seiner Posts darstellen, kommt man nicht ohne weiteres auf den Parameter, weil überall nur die Angabe der vorhandenen Kategorien dargestellt wird.
Daher wird oftmals hergegangen und eine Sammelkategorie für alle Kategorien angelegt. Mit Hilfe dieser Sammelkategorie werden dann die Posts aus den Unterkategorien angezeigt. Eine genauere Beschreibung der Problematik kann in diesem Beitrag des wordpress-deutschland.org-Forums erlangt werden.
Bei entsprechendem Einsatz des cat-Parameters, lassen sich die Posts aller Kategorien mit 2 Zeilen vor dem Loop abfragen, ohne eine Sammelkategorie einrichten zu müssen:
rewind_posts();
query_posts('cat=0');
Die Kategorie 0 existiert real natürlich nicht und signalisiert WordPress das es die Posts aller Kategorien abfragen soll.
[bearbeiten] Parameter
[bearbeiten] Kategorie Parameter
Nur Beiträge die zu einer bestimmten Kategorie gehören anzeigen.
- cat
- category_name
Zeige eine Kategorie anhand der ID
query_posts('cat=4');
Zeige eine Kategorie anhand des Kategorienamens
Display posts from only one category by name:
query_posts('category_name=Lifestyle');
Zeige mehrere Kategorien anhand der ID
query_posts('cat=2,6,17,38');
Beiträge einer bestimmten Kategorie ausschließen
Es werden alle Beiträge angezeigt außer von der ausgeschlossenen Kategorie. Hierbei erhält die ID den Präfix '-' (minus).
query_posts('cat=-3');
Das schließt alle Beiträge der Kategorie 3 aus. Ein kleines Manko gibt es dennoch: Gehört ein Beitrag mehr als einer Kategorie an wird dieser dann trotzdem angezeigt.
[bearbeiten] Autor Parameter
Du kannst die Beiträge auch anhand des Autors eingrenzen.
- author_name=Peti
- author=1
author_name bedient sich beim user_nicename feld, wohingegen sich author bei der autor id bedient.
[bearbeiten] Parameter für Seiten und Beiträge
Einen einzelnen Beitrag oder eine einzelne Seite abfragen.
- p=1 - benutze die Post ID um den ersten Beitrag anzuzeigen
- name=first-post - benutze die Titelform um den ersten Beitrag anzuzeigen
- page_id=7
- pagename=impressum
- showposts=1 (du kannst auch showposts=3 verwenden. die angegebene Nummer bestimmt das Limit der angezeigten Beiträge
- offset=3 überspringt die ersten zwei Beiträge (einer Kategorie) und zeigt erst ab dem dritten Beitrag an
Aufgrund der Template Hierarchie wird die home.php zuerst ausgeführt. Das heißt, du kannst eine home.php erstellen und darin den query_posts ausführen um eine Seite anzufragen die dann als Startseite eingesetzt wird. So kannst du ohne Plugins oder Hacks eine Startseite erstellen die nicht wie eine klassische Blog-Seite aussieht.
[bearbeiten] Zeit Parameter
Fragt die Beiträge aus einem bestimmten Zeitraum ab.
- hour=
- minute=
- second=
- day= - Der Tag des jeweiligen Monats. Beispielsweise alle Beiträge die am 15. verfasst wurden.
- monthnum=
- year=
[bearbeiten] Seiten Parameter
- paged=2 - Zeigt Beiträge die durch Klicken von "Ältere Beitäge" normalerweise nur auf Seite 2 erscheinen würden.
- posts_per_page=10 - Bestimmt die Anzahl der Beiträge die je Seite angezeigt werden. -1 zeigt alle Beiträge.
- order=ASC - Zeigt die Beiträge in chronologischer Reihenfolge. DESC genau anders herum (Standard).
- orderby=title - ordnet die Beiträge nach dem Postitel. Weitere Optionen für orderby: author, date, category, modified, menu_order
- nopaging=true - Posts werden nicht auf mehrere Seiten verteilt.
[bearbeiten] Parameter verbinden
Die Parameter können mit einem kaufmännischen Und (&) verbunden werden. Z.B.:
query_posts('cat=3&year=2004');
[bearbeiten] Ressourcen (Eng.)
- If..Else - Query Post Redux
- If..Else - Make WordPress Show Only one Post on the Front Page
- If..Else - Query Posts
- Sporadic Nonsense - Article Management with WordPress
[bearbeiten] Ähnlich
query_posts, bloginfo, wp_title, get_archives, wp_get_archives, get_calendar