Expliziten Inhalt in WordPress laden

WordPress vergibt für jeden Beitrag, Seite und Kommentar eine eindeutige ID in der Datenbank. Diese macht es einfach und schnell möglich, einen expliziten Inhalt aus der Datenbank zu laden. Wozu? - Dafür gibt es eine ganze Reihe Anwendungsmöglichkeiten. In einem konkreten Projekt wird Inhalt in den Header und Footer geladen, Text, der den Leser des Blog informiert.

WordPress vergibt für jeden Beitrag, Seite und Kommentar eine eindeutige ID in der Datenbank. Diese macht es einfach und schnell möglich, einen expliziten Inhalt aus der Datenbank zu laden.

Wozu? - Dafür gibt es eine ganze Reihe Anwendungsmöglichkeiten.
In einem konkreten Projekt wird Inhalt in den Header und Footer geladen, Text, der den Leser des Blog informiert.

Ein konkretes Beispiel ist das Blog von Shirtinator, dort wird im Header- und Footer-Bereich Inhalt aus dem Backend, aus statischen Seiten, gezogen.
Shirtinator Blog

In der Regel werden solche Texte direkt im Markup des Theme hinterlassen, was die Pflege für den Laien erschwert. Aber auch für solche Zwecke nutzt man ja ein CMS, warum also nicht einen Artikel aus der Datenbank dazu nutzen. Insbesondere eignet sich dazu eine statische Seite, die ist schnell wieder auffindbar und nicht im täglichen Artikelzoom eines Weblogs.

Laden eines beliebigen Beitrags

Hat man spezielle Anforderungen und kann mit dem Loop arbeiten, dann empfiehlt sich die erste Lösung im folgenden Code. Eine genaue Doku zu query_posts findet sich im Codex, denn dieser Template Tag kann wesentlich mehr und macht die Anwendung für besondere CMS-Gestaltung möglich.


<?php
$post_id = 3;
query_posts('p=' . $post_id); // post-ID
while (have_posts()) : the_post(); // starte the_loop
	_e('<h3>') . the_title() . _e('</h3>') . "\n";
	the_content();
endwhile;
?>

Der zweite Codeschnipsel greift direkt in die Datenbank ein und holt den Beitrag, ohne Formatierung durch die WordPress-Filter und kann so beliebig via Template ausgegeben werden. Dabei spielt es keine Rolle, ob es sich um einen Beitrag oder eine statische Seite handelt, denn WordPress vergibt die ID ohne Unterscheidung. Für den Unterschied Seite/ Beitrag steht ein weiteres Tabellenfeld bereit, was aber in dem Fall nicht nötig ist und so genügen die beiden Felder post_title, post_content für Titel und Inhalt.


<?php
$results = $wpdb->get_results("
                        SELECT post_title, post_content
                          FROM $wpdb->posts
                         WHERE ID = '9'
                              ");
foreach ($results as $pagepost) {
	echo '<h3>' . $pagepost->post_title . '</h3>' . "\n";
	echo '<p>' . $pagepost->post_content . '</p>';
}
?>

Laden einer beliebigen Seite im Loop

Im Grunde muss man nur die Adresse ändern. Während man mit p= einen Beitrag anspricht, bekommt man mit ?page_id= eine statische Seite.


<?php
query_posts('?page_id=3'); // post-ID
while (have_posts()) : the_post(); // starte the_loop
	_e('<h3>') . the_title() . _e('</h3>') . "\n";
	the_content();
endwhile;
?>

Laden, außer einer bestimmten Kategorie

Parameter des Tag ist cat=-. Will man mehrere Kategorien ausschließen, dann werden die IDs der jeweiligen Kategorie getrennt cat=-1,-3,-9.


<?php
query_posts('cat=-123); // category-ID
while (have_posts()) : the_post(); // starte the_loop
	_e('<h3>') . the_title() . _e('</h3>') . "\n";
	the_content();
endwhile;
?>

Laden, einer bestimmten Kategorie

Auch hier kann man explizit Kategorien nutzen, einfach die entsprechenden IDs mit Kommata trennen cat=1,3,9. Entscheidend, ohne Minus - vor der Kategorie-ID.


<?php
query_posts('cat=123); // category-ID
while (have_posts()) : the_post(); // starte the_loop
	_e('<h3>') . the_title() . _e('</h3>') . "\n";
	the_content();
endwhile;
?>

more-Funktionalität erhalten

Soll die more-Funktionalität (<--more-->) von WordPress erhalten bleiben, dann muss die Variable dafür gesetzt werden.


<?php
query_posts('cat=123); // category-ID

global $more;
$more = 0; 

while (have_posts()) : the_post(); // starte the_loop
	_e('<h3>') . the_title() . _e('</h3>') . "\n";
	the_content();
endwhile;
?>

13 Kommentare

  1. Jap sauber. Hab so meine Firmenseite mit WordPress realisiert. Ist schon cool was man damit alles anstellen kann und trotzdem via Backend auf einfache Art und Weise weiterpflegen kann 🙂

  2. manuel merz, klase gemachte firmen seite 😉

    für meinen geschmack die referenzen etwas zu schnell im wechseln macht die seite unruhig

  3. Habe bei meinem Relaunch auf ein Theme im Magazin Style auch viel mit query_posts gearbeitet, vor allem die Anzeige der Beiträge einer oder mehrere Kategorien ist damit einfach zu lösen.

    Hätte dabei gleich eine Frage zu einem Datenbank-Feld in "wp_posts", und zwar zum Feld "guid". Dort wird scheinbar direkt beim Erstellen eines Beitrags die aktuelle URL eingetragen und zwar mit der zu diesem Zeitpunkt eingetragen Blog-URL und den Permalink-Einstellungen. Wenn man nun Veränderungen an der Permalink-Struktur vornimmt, dann stimmt zwar die Anzeige im Blog, aber das Feld "guid" hat weiterhin die alten Inhalte.

    Aufgefallen ist mir das Feld, nachdem ich das Plugin "crawlink" ausprobiert habe. Dieses greift auf eben dieses Feld "guid" zu. Weiß jemand wo dieses Feld noch Verwendung findet bzw. für was dieses Feld da ist?

  4. hallo, ich bin auf der suche nach einen code, welcher es ermöglicht auf einer statischen WP-seite, den inhalt einer fertig auf meinem server liegenden *.html datei zu laden.

    gibts dafür eine ähnliche möglichkeit?
    das ist desshalb nötig, weil diese *.html datei tgl mit einem desktop-programm neu generiert wird und nach dem upload in eine stat. seite geladen werden soll.

    vielleicht fällt ihnen ja was ein, was mir hilft.

    herzlichen dank
    hans

  5. @Hans: prinzipiell kannst du jeden Inhalt mit PHP laden, allerdings wird das nicht sauber sein.

    <?php include 'datei.html'; ?>
    Die zu includende Datei ist ja inkl. head und body und daher wäre das nicht valide.
    Dann ist es vielleicht eher etwas für ein iFrame, auch wenn es da wieder andere Punkte gibt.
  6. Hallo Frank,

    Vielen dank für deine schnelle Antwort, ich habs ausprobiert und wie du schon gesagt hast es entstehen Fehler. Was hat es mit iFrame auf sich, wie ist die Herangehensweise?

    Kannst du auch da helfen?

  7. hallo nochmal.

    1000 Dank Frank 😉
    Das klappt gut. Einziges pRoblem welches ich noch habe ist, das obwohl charset UTF-8 eingestellt ist, sowohl in der *.html datei als auch im verlinkten iFrame code.

    Hast du noch ne Idee?
    Hans

Kommentare sind geschlossen.