nur Artikel einer Kategorie anzeigen – so funktioniert es

Loop Beispiele WordPress
Loop in WordPress

Wie man in WordPress Artikel aus nur einer Kategorie anzeigen kann ist eine sehr häufige Frage via E-Mail an mich. Daher sammelte ich alle Lösungen die ich kenne und zeige diese inclusive der Umsetzung hier auf.

Hier findest Du „Sprunglinks“ zu den diversen Möglichkeiten, Du kannst aber auch einfach alles lesen :-)

Ich mag Artikeln aus nur einer Kategorie anzeigen:

aber Achtung bei all dem hier

Wenn Du in einem gekauften, kostenfreien oder Standard Theme etwas änderst, ist es ratsam ein Child Theme anzulegen, weil sonst deine Änderungen beim nächsten Update einfach weg sind.

Siehst Du Veränderungen nicht gleich, hast Du eventuell ein Cache Plugin aktiviert oder der Browsercache ist nicht geleert.

nur Artikeln der Hauptkategorie anzeigen

Du hast Hauptkategorien mit Unterkategorien und magst bei der Ansicht der Hauptkategorie aber nur die Artikel aus der Unterkategorie anzeigen.

  1. 1. Prinzipiell ist das Speichern eines Artikels in unterschiedlichen Kategorien nicht zu empfehlen -Klotzen und nicht kleckern ist auch bei der Planung der Content Hierarchie schlussendlich der erfolgreichere Weg.
  2. 2. es sollen Artikel gefiltert werden, aber die „Weiterblättern“ Funktion /Pagination erhalten bleiben.

1. Code direkt in die category.php.
Diese Methode ist bekannt, doch sie bringt sehr sehr viele Nachteile, ich lasse hier den Code drin, weil sehr oft danach gesucht wird via Google, doch es ist dringendst empfohlen dies nicht zu verwenden.

<?php
.......

get_header(); 
global $wp_query;
$args = array_merge( $wp_query->query, array( 'category__in' => array(get_query_var('cat')) ) );
query_posts( $args );?>

2. Lösung über die functions.php.

Diese Methode ist besser, schonender für WordPress und allen, die damit zu tun haben.

Die functions.php mit einem Textditor öffnen und dort wo Du es wiederfindest fügst du jenen Code ein

$cat = get_term_by('name', $query->query_vars['category_name'], 'category');
$child_cats = (array) get_term_children( &$cat->term_id, 'category' );
 if ( !$query->is_admin ){
    $query->set( 'category__not_in', array_merge($child_cats) );
    return $query;
   }
add_filter( 'pre_get_posts', 'fb_filter_child_cats' );

Diese Lösung ist von Frank Bueltge, der sie dankenswerter Weise hier veröffentlicht hat.

Speichern, in den Theme Ordner hochladen. Fertig! :-)

nur Artikel einer Kategorie auf der Startseite anzeigen

1.
Du hast jede Menge an Kategorien, aber auf der Startseite sollen wirklich nur Artikeln aus einer einzigen Kategorie angezeigt werden.

Du brauchst dazu die ID der Kategorie, diese findest du im Admincenter//Dashboard==> Artikel==> Kategorien==> mit der Maus über die Kategorie fahren und in der Statuszeile des Browsers die ID auslesen.

Untenstehender Code kommt in die functions.php des verwendeten Themes. Änderungen mit einem Texteditor machen.

Bei dem Beispiel hat die Kategorie die ID 5.

/**
* show only posts from category id 5 on homepage
* @param object $query data
* example from Monika texto.de
*/
function mts_include_category_homepage($query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '5' );
    }
}
add_action( 'pre_get_posts', 'mts_include_category_homepage' );

Pre get Posts schont Ressourcen, liefert einfach irr schnell aus und ist meiner Meinung nach die Methode, die man bevorzugt für das Filtern von Artikeln oder anderer Dinge verwenden sollte. Doch dazu ein andere Mal mehr.

Artikel aus einer Kategorie in der Sidebar anzeigen

<ul>
<?php
global $post;
$tmp_post = $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach;  $post = $tmp_post; ?>
</ul>

In einer ungeordneten Liste werden 5 Artikel (numberofposts) -aber nicht der zuletzt geschriebene (offset) -aus der Kategorie mit der ID 1 (category) angezeigt.

Wenn Du dies nicht direkt in die sidebar.php schreiben magst, dann brauchst Du dazu das Code Widget Plugin.

Artikel nur aus einer Kategorie auf einer statischen Seite anzeigen

Da verweise ich einfach auf meinen Artikel aus dem Jahr 2006 ==> er wird allerdings immer wieder erneuert ;).

Grund: dies ist sehr lang, weil Schritt für Schritt erklärt und würde hier zu unübersichtlich werden.

Hier gehts lang ==> Statische Seite X zeigt Artikel aus Kategorie Y an .

Ich beantworte gerne Fragen dazu, wenn ich es kann.

Erstveröffentlichung: 26.Juni 2012
Überarbeitet: 13. November 2014

Und ich freu mich wirklich immer über ein +1, wenns geholfen hat,Monika
39

39 Beiträge zu “nur Artikel einer Kategorie anzeigen – so funktioniert es

  1. Ping nur Artikel einer Kategorie anzeigen – so funktioniert es » Planet WordPress

  2. Kommentar Autor
    Tom
    Kommentar

    Hör doch mal bitte auf so interessantes Zeug zu schreiben. Ich komm‘ ja gar nicht dazu, das alles umzusetzen..

  3. Ping Endlich kann es weitergehen … | SebPage

  4. Kommentar Autor
    Jan
    Kommentar

    Super Erklärung.
    Vielen Dank dafür, bis jetzt musste ich das immer mit einem Plugin vornehmen. Allerdings wisst Ihr ja selbst wie sich zu viele Plugins auf die Geschwindigkeit der eigenen Homepage auswirken können.

  5. Kommentar Autor
    Monika
    Kommentar

    @Jan, ob du das mit einem Plugin oder so machst ändert an der Geschwindigkeit nichts,
    man greift in den vorgegeben Ablauf ein und das kostet immer => aber man muss abwägen was einem wo wieviel „Verlust“ wert ist

    und schreibst du dies selbst, weißt du was du getan hast und wirst unabhängiger

  6. Kommentar Autor
    Stefan
    Kommentar

    Viel interessanter fü mich ist im Moment wie ich WP erklären kann, dass ich nur diese Artikel angezeigt haben möchte die in ganz bestimmten Kategorien sind , aber nicht die anderen. Beispiel:

    Artikel 1 ist in

    Sport, Beschreibung

    Artikel 2 ist in

    Sport, Tanzen, Beschreibung

    Artikel 3 ist in

    Sport, Tanzen

    ich möchte nur den Artikel haben der Sport und Beschreibung aber sonst nichts enthält.

    Das stellt sich als recht kompliziert dar.

    :-(

  7. Kommentar Autor
    Monika
    Kommentar

    Hi Stefan

    ach ich sollte um die Zeit nicht mehr denken, das geht nicht ==> tut mir leid für die Verwirrung,
    ich bleib da dran Stefan ;)

  8. Kommentar Autor
    Michelon
    Kommentar

    Hallo, ich bin auf diese Seite gestoßen, weil ich eine Möglichkeit gesucht habe, nur artikel einer bestimmten kategorie auf einer seite (Startseite) auszugeben. Wenn ich den Code in die functions.php eingefügt habe, muss ich ihn doch später an der richtigen stelle noch irgendwie einbinden, oder? das check ich nich so ganz muss ich den dann einfach mit der funktion „mts_include_category_homepage“ aufrufen? und welchen parameter gebe ich an?

  9. Kommentar Autor
    Monika
    Kommentar

    Hallo Michelon
    nein, wenn du die Funktion mts_include_category_homepage in der functions.php hast, brauchst du einfach nichts mehr zu machen.

  10. Kommentar Autor
    Michelon
    Kommentar

    hmm das verstehe ich nicht. kann es sein, dass das bei mir nicht funktioniert, weil ich ein anderes template verwende? ich benutze das „visato“ template von flashxml.net

  11. Kommentar Autor
    Monika
    Kommentar

    da muss ich passen Michelon, ich kenne das Template nicht und bei der Fülle an Themes die es gibt wäre das auch unwahrscheinlichst -leider

  12. Kommentar Autor
    michelon
    Kommentar

    Okay, vielleicht komme ich dann in einschlägig bekannten Foren eine Antwort.
    Vielen Dank aber für die tolle Seite. Ich war mit Sicherheit nicht das letzte Mal hier.gruß
    michael

  13. Kommentar Autor
    Monika
    Kommentar

    freu mich dich wieder zu lesen :-) Michael
    eventuell hast du da einen ganz eigenen Loop in der Startseite drin … maybe … aber ich kann da nur spekulieren

  14. Kommentar Autor
    ed.
    Kommentar

    bei mir funktioniert der code bezügl. ’nur beiträge aus best. kategorien auf der startseite zeigen‘ leider nicht.

  15. Kommentar Autor
    Birgit
    Kommentar

    Hallo Monika, besten Dank für die äußerst hilfreichen Informationen.
    Ist es wohl möglich auf der Startseite nicht nur Beiträge einer bestimmten Kategorie, sondern mehrerer explizit ausgewählter Kategorien anzuzeigen?
    Vielleicht kann die Routine ‚mts_include_category_homepage‘ so genutzt werden, dass mehrere Kategorien statt nur einer als ausgewählte Kategorien angegeben werden können. Über Unterstützung wäre ich sehr dankbar, da ich an dieser Stelle einfach nicht weiter komme.
    Liebe Grüße, Birgit

  16. Kommentar Autor
    Birgit
    Kommentar

    Ja, es ist möglich. Habe noch mal probiert und man kann einfach statt der Angabe nur einer Kategorie auch mehrere (z.B. die Kategorien 5, 7 und 8) angeben:
    $query->set( ‚cat‘, ‚5,7,8‘ );
    Dann nochmals besten Dank für deine Anleitung!

  17. Kommentar Autor
    Monika
    Kommentar

    gern geschehen Birgit, schön, dass du eine Lösung für dich selbst gefunden hast :-)

  18. Kommentar Autor
    Jörg Hagemeister
    Kommentar

    Hallo Monika,
    habe das in die functions.php reinkopiert und die Nr. der Kategorie hinterlegt -> bei Aufruf meiner Seite kommt jetzt immer ein leeres Fenster, d.h. es wird komplett nichts mehr angezeigt ;-) Komme auch ins Backend nicht mehr – nach aufruf einfach eine Leere Seite!

    Was könnte das sein?

    Gruß
    Jög

  19. Kommentar Autor
    Monika
    Kommentar

    vermutlich ein Fehler beim „Kopieren“,mache diese Änderung rückgängig und schau , ob du wieder reinkommst und kopiere obigen Code zuerst in einen Texteditor
    lg

  20. Kommentar Autor
    Heike
    Kommentar

    Abgefahren – es geht!!!!
    Da habe ich doch tatsächlich meine erste archive.php selbst erstellt… Verrückt!
    Jetzt noch ein bisschen Basteln, und dann fliegt das handgepflegte Inhaltsverzeichnis raus & das neue automatisierte wird geladen.

    Danke Danke Danke ;-)

    Viele Grüße
    Heike

  21. Kommentar Autor
    Monika
    Kommentar

    grüß Dich Heike
    deine Freude ist super …. und ich mag es sehen, wenn es online ist (!)

  22. Kommentar Autor
    Heike
    Kommentar

    Hallo zurück,
    dauert noch ein wenig, weil ich noch zwei Probleme lösen muss:
    Ich habe zu einigen Kategorien Unterkategorien gebildet.
    Wie kann ich verhindern, dass diese angezeigt werden? Sonst ist ja alles doppelt nachher…
    Gibt es so was wie eine „ist-nicht-gleich“-Funktion?
    Und dann muss ich noch die Schrift ändern, weil sie in der aktuellen Formatierung auf einmal keine Umlaute mehr kann, aber da muss ich wohl mal in irgendeinem css nachgucken, was da definiert ist, oder?

    Sonnige Grüße
    Heike

    P.S.: Kann man hier die Kommentare abonnieren?

  23. Kommentar Autor
    Monika
    Kommentar

    @Heike

    ich probierte dieser Tage drei Plugins aus , damit die Kommentare abonnierbar sind und alle drei knallen mir derartig viele Fehler um die Ohren, dass ich sie entweder neu schreiben oder ganz anders lösen muss :(((((

    Und deine andere Frage ist hier unter Punkt 2 gelöst,wenn ich dich richtig verstanden habe.

  24. Kommentar Autor
    Heike
    Kommentar

    Hallo Monika,
    da verstehe ich leider nur Bahnhof (bin ja auch blutiger Anfänger im Seiten-Templates erstellen)…
    Ich habe aber noch einen anderen Weg gefunden:
    $args = array( ‚cat=-13,-14,-593‘ );
    Das funktioniert ganz prima & ich kann verstehen, was da steht ;-)

    Leider funktioniert das Archiv für eine einzige Unterkategorie noch nicht. Diese heißt „Online-Marketing“ und der Slug ist „online-marketing“. Es scheint am Bindestrich zu liegen, aber auch wenn ich mit der Cat-ID arbeite zeigt WordPress immer einfach die neuesten Posts an. Hm.
    Ich werde mal weiter suchen.

    Zum Thema Kommentare abonnieren: ich glaube, das ist bei mir über JetPack gelöst, vielleicht funktioniert das ja auch für Dich!

    LG & vielen Dank für deine tollen Tipps
    Heike

  25. Kommentar Autor
    Heike
    Kommentar

    Hach – Lösung gefunden, aber ist komisch:
    statt
    $args = array( ’numberposts‘ => 50, ‚category‘ => 14 );
    muss man
    $args = array( ‚category‘ => 14, ’numberposts‘ => 50 );
    nehmen, dann geht es.
    Verstehe ich zwar nicht, aber egal – es läuft!

    Gute Nacht
    Heike

  26. Kommentar Autor
    Monika
    Kommentar

    @Heike
    du bist gut(!) wirst eine professionelle „Template“ Erstellerin noch :-)
    und es sieht sehr schön aus ….

  27. Kommentar Autor
    renate
    Kommentar

    Hallo Monika,
    vielen Dank für die vielen tollen Tipps auf deiner Seite.
    Ich habe Lösung 2 realisiert über die functions.php. Gibt es die Möglichkeit bei dieser Lösung noch eine Navigation hinzuzufügen mit der ich zwischen den Artikeln einer Kategorie hin- und herblättern kann.
    Im Voraus vielen Dank für Deine Antwort!
    Schöne Grüße,
    Renate

  28. Kommentar Autor
    Monika
    Kommentar

    Hallo Renate

    das regelt normalerweise eine Angabe im Theme mit

    next_posts_link  
    und 
    previous_posts_link[/php]
    
    oder Du nimmst ein Plugin wie wp page navi
  29. Kommentar Autor
    renate
    Kommentar

    Hallo Monika,
    Danke, ich habs mit next_posts_link und previous_posts_link hinbekommen.
    Grüße
    Renate

  30. Kommentar Autor
    Nico
    Kommentar

    Funktioniert es auch einen Artikel (ID z.b. 98) auf einer Seite anzeigen? Falls die funktionieren sollte, kann man diesen Code auch in die Seite einpfelgen und nicht direkt ins Template?
    Wäre sehr dankbar für eine Antwort :)

    Grüße

  31. Kommentar Autor
    Monika
    Kommentar

    Hi Nico direkt in die Seite einpflegen => ich nehm an damit meinst du den Editor oder ?
    wenn ja , dann nur über den Umweg eines Shortcodes oder mit dem Plugin Exec PHP, das ist aber für Laien denn doch hie und da gfährlich

  32. Kommentar Autor
    Nico
    Kommentar

    Morgen Monika,
    genau, direkt in den Editor.
    Ich weiß das es nicht die sauberste Lösung ist, allerdings ist mir keine andere Lösung für meien Seite sinnvoll. Laien werden diese Seite nicht pflegen daher wäre das kein Thema.
    Wo kann ich den solche Shortcodes finden oder muss man diesen selber erstellen?

    Vielen Dank :)
    Gruß Nico

  33. Kommentar Autor
    Sören
    Kommentar

    Hallo Monika,

    für einen Bekannten aktualisiere ich mehr oder minder freiwillig einen WordPress-Blog.
    Dieser soll nun eine geänderte Startseite erhalten. Und zwar stellt er es sich so vor, dass man auf der Startseite mehrere Kategorien sieht mitsamt den letzten 3-4 Artikel. Ähnlich wie bei Focus.de, die man dann weiterlesen kann.

    Hast du vielleicht auch für mich hier einen Lösungsweg? Oben genannter ist ja lediglich für eine einzelne Kategorie.
    Und auch die anderen Skripte trennen nicht so wirklich die Beiträge.

  34. Kommentar Autor
    Thomas
    Kommentar

    Hallo Monika,
    mich würde interessieren, wie ich auf einer Kategorieseite alle Posts nach A-Z darstellen kann.
    Kannst du mir hier etwas behilflich sein ?
    Gruß Thomas