Sidebar
ein-/ausblenden

Expliziten Inhalt in WordPress laden

Plugin für WordPress SEO

Anzeige

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 und 1 Trackback zu „Expliziten Inhalt in WordPress laden“

  1. 1
    Kommentar von Manuel Merz

    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. 2
    Kommentar von picard

    manuel merz, klase gemachte firmen seite ;-)

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

  3. 3
    Pingback von Expliziten Inhalt in WordPress laden » Tom Schimana – Weblog
  4. 4
    Kommentar von DSL-Blogger

    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?

  5. 5
    Kommentar von Raketentim

    Großartig, genau danach habe ich gesucht. Vielen Dank.

  6. 6
    Kommentar von Hans

    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

  7. 7
    Kommentar von Frank Bültge

    @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.
  8. 8
    Kommentar von Hans

    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?

  9. 9
    Kommentar von Frank Bültge

    @Hans: siehe Doku, da findest du alles relevanten Infos

  10. 10
    Kommentar von Hans

    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

  11. 11
    Kommentar von Frank Bültge

    @Hans: immer schwierig ohne Links, erraten kann ich nur, dass die html ein anderen Zeichensatz nutzt.

  12. 12
    Kommentar von Ramona

    Als Nicht-PHPlerin war ich neugierig auf diese tolle Funktion und habe sie (Inhalt einer best. Seite) per Codeschnipsel in der header.php nach dem header-div platziert sowie h3 und p mit styles zum Platzieren, Formatieren ergänzt. Meine Frage: Ist das OK so im Sinne von "sauberer Code"? Zusaätzlich habe ich in der eigentlichen Seite div-Tags benutzt, um Grafik und Text entsprechend anzuordnen.

  13. 13
    Kommentar von Frank Bültge

    @Ramona: der PHP-Code kann prinzipiell überall stehen, enthält er jedoch HTML, wie bei dir, dann muss er im body der Seite sein, was du ja somit korrekt erstellt hast. Zusätzlich ist das Validieren sinnvoll.

  14. 14
    Kommentar von Malte

    query_posts('?page_id=3');

    Beim Laden einer statischen Seite hat "?page_id=3" bei mir nicht funktioniert. Ohne Fragezeichen funktioniert es allerdings.

    Dennoch danke für die Hilfe!

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.