Statische Seite X zeigt Beiträge von Kategorie Y an.

Update 2011: Neue Technik. Ich mag Beiträge einer bestimmten Kategorie nur anzeigen, wenn man auf einer bestimmten statischen Seite ist. Dies kann man in WordPress leicht lösen.

 
WordPress Loop in Action viele Beispiele

Angefragt wurde ich, wie man es in WordPress schafft, dass man beim Aufrufen der statischen Seite X soundsoviele Beiträge aus der Kategorie Y angezeigt bekommt.

Diese Anfrage kam im Februar 2006 und daher veröffentlichte ich am 1. März 2006 das erste Mal diesen Artikel. Heute habe ich ihn komplett neu geschrieben und trage damit den veränderten Möglichkeiten in WordPress Rechnung.

Als Vorbereitung für diese Lösung musst Du:

  1. Admincenter//Dashboard==>Seiten==>ID der Seite suchen und merken.
  2. Admincenter//Dashboard==>Artikel==>Kategorien==>ID der Kategorie suchen und merken.

In meinem Beispiel ist die ID der Seite 9.
Die ID der Kategorie ist 3.
Eingetragen habe ich es in meiner sidebar.php.

ein benutzerdefinierter Loop – beeinflusst der auch andere

Diese Lösung funktioniert vor dem normalen Loop und nach dem normalen Loop und wie immer habe ich eine sehr einfache Erklärung mit dabei. ;) Und ich kanns nicht oft genug erwähnen. Dieser Loop beeinflusst andere Loops nicht!

Direkt in die page.php kann man dies schreiben.

 
 <?php if (is_page('9')) { // ID der gewünschten Seite ?>
 
<?php
global $post;
$tmp_post = $post;
$args = array( 'numberposts' => 6, 'offset'=> 3, 'category' => 6 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
 
<?php the_time(__('d.m.:')) ?><a href="<?php the_permalink() ?>" rel="bookmark" title="  <?php the_title(); ?>"><?php the_title(); ?></a>.
 
<?php endforeach;  $post = $tmp_post; ?> 
 
 </ul>
 
<?php } ?>

Erklärung:

 <?php if (is_page('9')) { // ID der gewünschten Seite ?>

Das heißt ausgesprochen:
Wenn es die Seite mit der ID 9 ist, dann…

Das <ul> öffnet die ungeordnete Liste, in der ich die Beiträge anzeigen lassen mag => logisch kannst Du das ändern.

<?php global $post;
$tmp_post = $post;
$args = array( 'numberposts' => 6, 'offset'=> 3, 'category' => 6 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

Meine Erklärungen sind meist sehr bildhaft ;)

Liebes WordPress, du glaubst zwar jetzt gehts um eine Seite, doch ich gebe dir nun den Befehl zeige Artikel an,
und zwar 6 (numberposts), aber nicht die ersten 3 (offset) und zwar nur aus der Kategorie mit der ID 6.

Und hole alles was zu einem Artikel dazugehört aus der Datenbank raus (setup_postdata).

===> Du könntest also auch Autoren, benutzerdefinierte Felder etc anzeigen lassen.

Jetzt wird angegeben wie die Beiträge aussehen sollen:

 
<li><?php the_time(__('d.m.:')) ?><a href="<?php the_permalink() ?>" rel="bookmark" title=" <?php the_title(); ?>"><?php the_title(); ?></a>.</li>

Hier hast Du freie Wahl. Ich lasse zuerst das Datum anzeigen, dann nur den Link zum Beitrag.
Packe dann alles zwischen die <li> und </li>, damit die Liste richtig wird.

alles bis zum “more-tag”….

 
<?php global $more;
$more = 0;
the_content('Weiterlesen'); ?>

den Loop beenden – so damit er andere Loops nicht stört

<?php endforeach;  $post = $tmp_post; ?>

Dies ist wichtig, damit WordPress weiß, es muss nicht mehr weiterarbeiten. (endforeach) und dies beendet den Loop komplett, sodass weitere Loops nicht von diesem beeinflusst werden ( $ post = $ tmp_post )

Abfrage, ob man auf der richtigen Seite ist mag auch beendet werden….

 
<?php } ?>

Schließt den ganzen Komplex, der mit if…. anfing.

Artikelhistorie:

Erstveröffentlichung: 01. März 2006 19:59
Update: 3.11.2011

Viel Spaß beim Ausprobieren.

bei Fragen einfach fragen..
40 Kommentare zu "Statische Seite X zeigt Beiträge von Kategorie Y an."
  1. Hi Monika,

    das hat mir schon etwas geholfen :)
    Allerdings werden bei mir dann die ganzen Artikel angezeigt, nicht nur ds bis zum more-tag. Weißt du vielleicht, warum?

    LG Birgit

  2. Vielen lieben Dank Monika! Die verlinkte Lösung war genau das, was ich brauchte. Dein WP-Wissen ist echt beeindruckend :)

  3. Das Script funktioniert so ganz gut nur gibt es einen kleinen Fehler: Der zeigt nur den letzten Beitrag in der Kategorie an. Ich hab “&numberposts=6&offset=3″ extra weg gelassen.

    Woran kann das liegen? Danke!

  4. numberposts sollte angegeben werden,damit gibst du die Anzahl der Artikel an,

    offset 3 sagt nur die ersten 3 Artikel nicht,

    sprich wenn es trotz dieser Angaben nur den letzten-also den neuesten anzeigt- ist irgendwo anders ein Fehler

    lg

  5. danke erstmal für das snippet, läuft ja ansich ganz gut … die artikel bestimmter cats werden auf den entsprechenden seiten angezeigt, nur … und jetzt mein problem … der ursprüngliche text der statischen seite verschwindet^^ … so hab jetzt zig versionen versucht und komme immer zu dem gleichen resultat: entweder statischer text, oder die artikel der category, aber nicht beides? …

    jetzt beschleicht mich langsam der verdacht, das es nur die entweder-oder-lösung gibt? ich hoffe ich liege falsch und es ist möglich erst die artikel einer bstimmten category und dann den statischen text/inhalt auf einer seite auszugeben? …

  6. schau dir die page.php Deines verwendeten Themes an

    da steht irgendwann mal endif -gleich darunter gibst Du obigen Code oder den von hier
    damit kannst Du besser mehrere Loops unterbringen

    oder Du gibst den Code für die Kat-ArtikelAnzeige VOR if have post while have post in deiner page.php

    ausprobieren ;)

  7. Danke für den hilfreichen Artikel.
    Hab mir damit ne tolle Startseite im Magazinformat gebastelt. Dort zeige ich aus den 4 Top Kategorien immer die 5 neuesten Beiträge an. Es gibt dazu zwar einige Themes, welche aber immer schwer zu durchschauen waren. So konnte ich mein eigenes Theme einfach anpassen ;-)

  8. Vielen Dank für diesen Hack. Er hat mir schon sehr viel weitergeholfen. Es gibt doch sicherlich noch die Möglichkeit WP, bzw. der statischen Seite mitzuteilen, dass die Artikel nur anreissen, also die More-Funktion beachten soll.

  9. Ich hab’s schon rausgefunden…. wie so oft hilft es nur schin, wenn man nach Hilfe fragt ;-) . Vor Ende des li-Tags habe ich folgendes eingefügt:

    <?php
    global $more;
    $more = 0;
      the_content('Weiterlesen'); ?

    Und damit beachtet WP auf der Unterseite den More-Tag eines Artikels.

  10. Eine Stunde Friemelarbeit (ich hatte eine Zeile übersehen und ewig rumprobiert, warum es nicht ging…) später funktioniert alles, wie es soll! Super Sache, danke für den Tipp.

    Unabhängig davon auch nochmal vielen Dank dafür, dass du deine alten Einträge nochmal durchsuchst und aktualisierst!

  11. Hallo Monika,

    danke für die bildhaften Erklärungen :)
    Jetzt habe ich also meine Artikel auf der speziellen Seite – ABER: Sie zeigen alle im Browserkopf nur den Title der speziellen Seite, und nicht den den Title der einzelnen Artikelseite. Gibt es irgendeinen Befehl, den ich ins Template hineinschreiben muss, damit das klappt? (Sorry, wenn ich etwas übersehen habe.)
    VG Stefan

  12. hi Stefan

    im Browserkopf steht immer nur der Titel der einen Seite, nie der Titel aller Artikel, die auf einer Seite angeführt werden

    ==> stell dir mal vor, da sind 200 Artikel verlinkt,
    das wären 200 Title im Browser => das ergibt keinen Sinn

  13. Huhu, danke für die schnelle Antwort! Wahrscheinlich habe ich mich etwas kryptisch ausgedrückt – die Seite, auf der die Artikel erscheinen, hat einen title. Der wird jetzt auf allen Artikel-Unterseiten angezeigt – statt der einzelnen titles der jeweiligen Artikel. Bestimmt gibt es eine Möglichkeit, das in der header.php anzupassen.
    In der Zwischenzeit – man fragt, und schon fällt einem eine Lösung ein, wie bei Quasimodo oben auch :) – habe ich mir mit einem SEO-Plugin beholfen. Trotzdem wäre es interessant, ob es händisch geht: Man will ja nicht 1000 Plugins im Auftritt herumfleuchen haben …
    Danke dir!

  14. da biste aber wirklich mit so einem SEO Plugin besser bedient,
    sonst wirds für nicht phpler kryptisch Ende nie ;)

  15. Hallo Monika,

    ich versuche es gerade, nach Deiner Anleitung eine statische Seite zu basteln, auf der alle Beiträge einer Kategorie aufgelistet sind. Im großen und ganzen scheint es zu klappen, aber die Beiträge werden einfach nacheinander genannt (verlinkt), ich möchte sie aber gelistet haben. Kann es sein, dass in Deinem Code oben irgendwo das fehlt? Wenn ja, wo genau? Habe versucht, es an verschiedenen Stellen im Dokument einzufügen, komme aber zu keinem zufriedenstellenden Ergebnis :(

  16. Achso, es könnte eventuell wichtig sein: ich benutze das Theme “Twenty Ten”, da gibt es zwei extra Dateien für loops, vielleicht soll ich es dort einfügen?

  17. gar keinen Loop von twenty ten,

    da oben steht ein Loop in meinem Artikel, den musst nehmen,

    die html Ausgabe musst Du anpassen,
    je nachdem was du haben magst…

  18. Guten Tag,
    ich würde gerne auf meinem Blog genau das hier beschriebene durchführen („Statische Seite X zeigt Beiträge von Kategorie Y an“). Allerdings frage ich mich gerade ob das bei mir überhaupt möglich ist.
    Denn ich nutze den Bloghosting-Dienst von WordPress. D.h. ich habe nichts extra auf meinem PC installiert sonder ich verwalte meinen Blog über eine Admin-Internetseite. Daher weiß ich nicht ob und wo ich auf die PHP-Seite für meinen Blog zugreifen kann.
    Kann mir da jemand helfen?
    Viele Grüße
    Daniel

  19. HI Daniel

    du hast deinen Blog bei wordpress.com,
    da wird dies so nicht funktionieren => weil Du eben keinen Zugang zum jeweiligen ThemeOrdner hast.

  20. “da wird dies so nicht funktionieren”,
    ok, habs fast befürchtet,
    trotzdem vielen dank

  21. Bei einem meiner Blogs hats geklappt, bei dem anderen leider nicht. Muss wohl an dem Theme liegen, aber das Theme von dem zweiten Blog ist auch echt sündhaft schlecht programmiert.
    Hatte auch erst das selbe Problem wie Stefan, habe mich aber dann an den Rat von Monika gehalten und das Problem mit dem Plugin WordPress SEO beseitigt. Danke! :)

  22. Hi, erstmal herzlichen Dank für die super Erklärung. Leider hab ich da jetzt noch ein Prob wo ich einfach nicht weiter komme. Muss aber zugeben, dass sich meine php-Kenntnisse sehr in Grenzen halten.

    Also ich hab aus der page.php ein neues Seitentemplate erstellt. Den Code von oben reinkopiert und angepasst. Soweit alles super. Aber normalerweise kommen sämtliche Beiträge auf weißem Hintergrund bzw. in so einem Kästchen.
    Nur auf der neu erstellten Seite, habe für den statischen Text das weiße Kästchen, die Artikel reihen sich nahtlos unten ohne Hintergrund an.

    Was bzw wo hab ich da den Fehler drinn? Benutze das Graphene Theme.

    Danke!

  23. Danke! Das Problem hab ich vorerst behoben. Habe im neuen Seitentemplate statt obigen Code folgendes eingegeben:

    statt cat=-0 hab ich die passende cat-id eingegeben. Jetzt hab ich zwar auf jeder Blogseite die selbe Anzahl an Artikel, aber fürs Erste sollte es so passen.

  24. hi Tommy das liegt nicht an der Kategorie, die du dazu hernimmst, also der cat id sondern an dem html, das du an dein theme anpassen solltest,

    ich kenne das deine leider nicht

  25. Wunderbar, der Artikel hilft wirklich weiter. Ein kleines Problem gibt es noch, das im Artikel nicht angesprochen wird: Wenn ich genau so wie beschrieben verfahre, dann erscheint unter der Liste der Beiträge der erste Artikel. Ich will aber gar keinen Artikel, sondern nur die Liste. Wie muss ich denn dann den Code modifizieren?

    Danke schon mal vorab!
    Raphael

  26. Raphael nur die Liste?

    also nur die Aufzählung der Artikeltitel mit den Links dazu ?

    wenn dies so stimmt, dann lass das weg :

    <?php global $more;
    $more = 0;
    the_content('Weiterlesen'); ?>
  27. Hi, guter Artikel, vielen Dank! Fehlt denn in dem Beispiel nicht der öffnende ul-Tag?
    Und kann ich die passenden Artikel z.B. nach Anfangsbuchstaben A, B, C sortieren lassen?

  28. Hmm kriege ich es damit auch irgendwie hin, dass alle Artikel ausgegeben werden, die ein bestimmtes Tag haben..?

  29. Ich benutze das Presswork Template.
    Hier gibt es leider keine Sidebar.php wo soll der Code dann hinein?

  30. huch @henne da kann ich dir nicht helfen, weil ich das template nicht kenne
    hat es eine Sidebar?
    wenn ja muss dazu irgendwo ein template dazu vorhanden sein

    oder die sidebar ist in der single.php mitdrin

    leider kann ich dir da nicht mehr helfen, haben die wo Hilfe oder eine Dokumentation zu ihren Themes=> eventuell findest du da was

  31. Hallo,

    also bei mir funktioniert das nicht. Irgendetwas mache ich falsch. Ich habe mein Template mit Artisteer erstellt und habe in die page.php den Codeschnipsel eingetragen. Anwelcher Stelle muss er denn genau rein. Ich habe alle möglichen Stellen ausprobiert, aber es funktionierte leider nicht.

  32. Hallo,

    wie bekomme ich es hin, dass ich nur die ersten 4 neue Artikel zu sehen bekomme und nicht wie du beschrieben hast die letzen 3…

    Danke!

  33. Hallo DIma

    du änderst diese Zeile

    $args = array( 'numberposts' => 6, 'offset'=> 3, 'category' => 6 );

    so ab

    $args = array( 'numberposts' => 4,  'category' => 6 );

    hilft das weiter?

3 Pings zu "Statische Seite X zeigt Beiträge von Kategorie Y an."
  1. WordPress Deutschland FAQ » Artikel der Kategorie X auf Seite Y anzeigen
    [...] Eine weitere Variante gibts bei Monika. [...]
  2. Wordpress-frage? Google hat die Antwort | Sméagol's Blog
    [...] Ich habe heute auf einen Blog eine Liste von Artikeln aus genau einer Kategorie auf genau eine Seite ausgeben ...
  3. Kat 1 Artikel | Lazar Gorodnitski
    [...] Eine weitere Variante gibts bei Monika. [...]

Was meinst Du dazu

Name und Email sind nötig. E-mail wird nicht veröffentlicht