Loop neuester Artikel pro Kategorie

  • Hallo liebe Community!

    Ich stehe vor folgendem Problem, wo ich bitte eure Hilfe brauche:

    Ich will immer den neuesten Artikel pro Kategorie auf der Startseite angezeigt bekommen. D.h. ich habe 5 Kategorien(fiktive Zahl), also soll angezeigt werden:
    -neuester Artikel aus cat=1
    -neuester Artikel aus cat=2
    -neuester Artikel aus cat=3
    -neuester Artikel aus cat=4
    -neuester Artikel aus cat=5

    Muss ich jetzt 5 Loops definieren à la query(’cat=n&[FONT=monospace]showposts=1[/FONT]’), wobei n je für meine catID steht? Ich bekomm auf dem Weg bei 30 Kategorien extrem viele Datenbankzugriffe zusammen.

    Danke für die Ideen!!

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Also so habe ich es bei mir gemacht, aber da sind es auch nur vier, fünf Kategorien. Ich wüsste auch nicht, wie Du das anders machen willst. Ok, wenn alle Kategorien halbwegs gleichmäßig bepostet werden, könntest Du auch einfach auf gut Glück die letzten 100 Postings oder so auslesen und nach Kategorien sortiert ausgeben. Aber das ist eher ein Workaorund, denke ich.

    Ansonsten kannst Du natürlich über Caching nachdenken, damit das nicht bei jedem Seitenaufruf ausgeführt werden muss. Und um es im Quellcode leichter zu haben, definiere ein Array mit den Kategorie-IDs und iterier dann einfach da drüber.

  • Danke Ammaletu!!

    Ich hab mir jetzt folgende Loop Struktur überlegt:

    Was denkt ihr? (Funktioniert so weit, ausser dass ich nun am Ende immer ein mal "Sorry, no posts matched your criteria." stehen habe.

  • Ja, sieht gut aus. Mach den else-Zweig doch einfach weg, wenn Du die Ausgabe nicht brauchst. Das kommt halt einmal pro Kategorie, die keine Beiträge enthält.

  • Guten Morgen,

    Ich frage mich, ob es nicht noch eine andere Möglichkeit gibt die Kategorien anders auszulesen ohne jedesmal einen neuen Loop einzufügen.

    Beispiel:
    Ich brauche die Titles aus 8 verschiedenen Kategorien.

    ungefährer Aufbau:



    Dann hätte ich auf meiner Startseite 9oder 10 Loops verbaut.
    Gibt es noch eine andere Möglichkeit an die News_Title der einzelnen Kategorien zu kommen?

    Grüße
    Mike

  • Prinzipiell hast Du nur diese beiden Möglichkeiten, denke ich: Eine DB-Abfrage (Loop) pro gewünschter Kategorie machen oder eben nur eine Abfrage machen und das Ergebnis nach Kategorien sortieren.

    Du kannst natürlich einen Loop nehmen und angeben, zu welchen Kategorien die Posts gehören sollen. Dann beschränkst Du das Ergebnis sagen wir mal auf 50 Posts, ohne Paging und sortierst das dann nach Kategorien. Beim Ausgeben kannst Du dann ja dafür sorgen, dass pro Kategorie nicht mehr als fünf Posts ausgegeben werden. Das kann dann aber eben dazu führen, dass nicht für jede Kategorie fünf Posts angezeigt werden, wenn eben in der Kategorie länger nichts geschrieben wurde. Wenn das ok ist (die nicht angezeigten Posts sind dann ja auf jeden Fall älter), ist der Ansatz vielleicht nicht so schlecht.

  • Ich habe 8x diesen Loop in einer Liste verbaut:

    PHP
    <div class="importBOX">
    <h3>Strategie</h3>
    <ul>
    <?php query_posts("showposts=5&category_name=News"); ?>
    <?php while (have_posts()) : the_post(); ?> 
    <li class="importTITLE"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    </ul>
    </div>



    Ich frage mich ob es dafür nicht eine einfachere Lösung gibt. Siehe Ergebnis - Neues aus unserem Netzwerk: http://tododle.de/wordpress/

    Ich kam bisher noch nicht dazu alles zu sortieren. So soll es später aussehen.

  • Einfach bei "save_post" (die Action wird beim Speichern eines Posts/Page ge"triggert") die Posts in der DB ablegen.

    Also quasi sowas:

    Dann müsste man eigentlich nur mehr die Option (1e Abfrage der DB) aus der Options-Tabelle mit holen, also in etwas so:

    PHP
    $home_posts = get_option( 'home_post_ids' );
    foreach ( $home_posts as $post ) {
      // Jetzt auf alle möglichen Parameter des Post-Objekts (od. ist das ein Array?) zugreifen und die Artikelansicht bauen
      // möglich sind zB.: $post->ID, $post->post_content, $post->post_title, etc.
    }

    Alles klar? Gutes Gelingen!

    Ps.: Alternativ könnte man auch einen shedule_event [1] machen.
    Pps.: Ist alles ungetestet, also bitte hier berichten ob das so funktioniert.

    [1] http://codex.wordpress.org/Function_Refer…_schedule_event

    Firebug laden! Foreregeln bitte lesen. FAQ. Bitte keine Anfragen per PN.

    Einmal editiert, zuletzt von kaiser (31. Januar 2011 um 02:19)

  • Die Transients API ermöglicht Dir "cron" jobs durchzuführen, also Dinge aus der DB holen und temporär abzulegen, damit Du dafürnicht permanent DB-Abfragen machen musst. Soweit klar? :)

    Die erste Lösung war ein Ersatz für die Transients, weil ich auf die einfach vergessen hatte ;) Kurz und gut: Die Transients ist einfacher.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!