Posts nach Kategorie ordnen

  • Hi!
    Ich möchte auf der Startseite die Posts nach Kategorie ordnen lassen und nicht nur nach dem Datum:

    z.B. auf der Startseite sollen die letzten 20 Posts angezeigt werden

    Die sollen nicht nach dem Datum geordnet werden sondern nach der Kategorie

    Statt
    Kategorie: HTML
    [INDENT]
    Post: Tabellen
    erstellungsdatum: 16.05.2008

    [/INDENT]
    Kategorie: PHP
    [INDENT]
    Post: Schleifen
    erstellungsdatum: 15.05.2008

    [/INDENT]
    Kategorie HTML
    [INDENT]
    Post: LISTEN
    erstellungsdatum: 14.05.2008

    [/INDENT]

    soll es so aussehen:

    Kategorie: HTML
    [INDENT]
    Post: Tabellen
    erstellungsdatum: 16.05.2008

    Post: LISTEN
    erstellungsdatum: 14.05.2008

    [/INDENT]
    Kategorie: PHP
    [INDENT]

    Post: Schleifen
    erstellungsdatum: 15.05.2008

    [/INDENT]
    Also der soll das neuste Datum von der Kategorie nehmen und wenn noch weitere Posts in den anzuzeigenden 20Posts sind soll er die unter dem selben Kategorie anzeigen ohne nochmal den Kategorienamen anzuzeigen.
    Ich hab das mit <?php query_posts('orderby=category'); ?> versucht aber damit funktioniert es nicht.

    Ich hoffe ich konnte es halbwegs verständlich ausdrücken.
    Hat jemand eine idee?

    Danke schonmal im voraus :)

    • 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

  • Da wirst du wohl für jede Kategorie einen eigenen Loop ausführen müssen, wenn du auch noch für jede Kategorie jeweils die Anzahl prüfen möchtest. Sonst werden nur wirklich alle Postings nach Kategorien sortiert ausgegeben.

    (Du kannst natürlich auch alle Postings zurückliefern lassen, und dann jeweils auf den Wechsel der Kategorie sowie auf die maximale Anzahl prüfen. Das wird aber erstens unperformant, weil trotzdem jedes mal alle Beiträge aus der DB geholt werden müssen und ist meiner Meinung nach außerdem viel zu viel Logik im Template.)

  • Nein. Man sollte die von WP zur Verfügung gestellten Möglichkeiten nutzen, und nicht selbst DB-Abfragen bauen, wo diese nich nötig sind. Die Datenbankstruktur kann sich ändern, das Theme sollte nicht darauf angepasst werden müssen. Wenn schon eigene DB-Abfrage, dann sollte er sich eine entsprechende Funktion bauen und diese auslagern (z.B. functions.php des Themes) damit bei Updates nur diese eine Funktion angepasst werden muss.

  • So ich buddel mal diesen Forum Zombie wieder raus *g*

    Also ich bin bei dem Problem im Wordpress forum auf ein Thread gestossen der es so löst:

    PHP
    <?php   add_filter('posts_join', create_function('$a', 'global $wpdb; return $a . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";'));
    					add_filter('posts_where', create_function('$a', 'global $wpdb; return $a . " AND $wpdb->term_taxonomy.taxonomy = \'category\'";'));
    					add_filter('posts_orderby', create_function('$a','global $wpdb; return "$wpdb->term_taxonomy.term_id DESC";'));
    					query_posts('');
    			?>

    Das Problem ist aber, dass er einfach von den versch. Kategorien die posts raus nimmt ohne auf das erstellungs Datum zu achten. D.h. wenn z.B. in categorienr.: 20 der neuste post ist aber in Kateogie 1 und 2 die Maximale anzahl von posts die auf der Seite angezeigt werden vorhanden sind, dann werden nur die Beiträge aus Kategorie 1 u. 2 angezeigt.

    Es soll aber so sein:
    ich sag mal maximale anzahl anzuzeigende Beiträge=20

    Hole die 20 neusten Einträge aus der DB.
    Fange mit dem neusten Eintrag an und überprüfe ob noch andere posts aus diesem Kategorie vorhanden sind. Wenn ja dann schicke die zusammen in die Loop ansonten mach mit der nä Post weiter.

    Ist es möglich das in Wordpress umzusetzen? Das in ne andere Programmier sprache zu programmieren wäre kein problem aber ich bin leider nicht so mit PHP und vorallem Wordpress syntax vertraut...

    Danke im voraus :)

  • es gibt ein Plugin das das macht aber jeweils nur einen Artikel pro Kategorie und ebenfalls nicht auf die Anzahl der Artikel pro Seite achtet, außer man beschränkt die Anzahl der Kategorien, die es anzeigen sollte
    eventuell findest du jemanden, der es dir auf mehrere Artikel umcodet

    wobei 20 Artikel auf der Startseite eh verdammt viel ist ;)

    Latest Post from each Category plugin for WordPress Dagon Design

    lg

  • Ich hatte diesen Plugin auch gefunden aber das Problem ist das in manche Kategorien nur sehr selten was gepostet wird z.B. Themen sepcials zur Weihnachten und dann würden dieser Artikel das ganze Jahr über auf der Seite erscheinen :(

    Ansonsten habe ich auch diesen Tutorial gefunden: Rhymed Code Grouped by Category
    leider sind hier die Kategories auch schon fest implementiert aber vllt hilft es ja jemanden der auf der suche ist.


    Noch eine Frage. Beim query_posts Tag sollte doch der orderby=category Parameter genau das machen was ich möchte, aber wenn ich es einbaue ändert sich auf der seite überhaupt nichts :(
    Mein queryposts ist denkbar einfach und kommt direkt vor der Loop:

    PHP
    <?php query_posts('orderby=category&order=DESC');  ?>

    Hat vllt noch jmd. ne idee wie man das machen kann?

    Einmal editiert, zuletzt von somebody (13. Dezember 2008 um 02:37)

  • Noch eine Frage. Beim query_posts Tag sollte doch der orderby=category Parameter genau das machen was ich möchte


    Dachte ich auch zuerst, aber macht es eigentlich nicht. Es sortiert die Posts einfach nach Kategorie, aber du bekommst weder eine Struktur in die Kategorien (Reihenfolge, Zwischenüberschriften) noch kannst du die weitere Sortierung beeinflussen (wird wohl nach Datum bzw ID sein).

Jetzt mitmachen!

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