Die Ausgabe von Custom Posts nach verschiedenen Taxonomien sortieren

  • Hallo,

    ich habe einen custom_post_type 'Album' erstellt. Dieser custom_post_type hat einen custom_taxonomy 'Erscheinungsjahr'.

    Bei der Ausgabe der Page 'archive-album.php' werden alle Alben korrekt nach dem letzten eingetragenen Album ausgegeben.

    Jetzt möchte ich gern die Ausgabe der Alben nach dem Erscheinungsjahr sortieren.

    Ist es überhaupt möglich, custom taxonomies zu sortieren oder zu filtern?

    Viele Grüße

    • 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

  • Natürlich geht das und eine Googlesuche hätte Dir auch unterschiedliche Beispiele gezeigt 'wordpress custom post type sort by taxonomy'

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Hallo butcher4ever,

    vom Prinzip her funktioniert es in etwa so:

    PHP
    new WP_Query( array (
        'post_type' => 'Album',
        'orderby' => 'Erscheinungsjahr',
        'order' => 'DESC'
    ) );

    Bei einem Archiv könntest du den pre_get_posts hook benutzen.

    LG
    Marvin

    // wp-styles.de

  • Hallo Mensmaximus und Marvin,

    danke für eure Antworten.
    Ich habe mich vielleicht nicht richtig ausgedrückt bei meiner Problemstellung, sorry.
    Ich durchsuche schon seit Tagen das Internet nach einer Lösung.

    Ich bin bisher zwei Wege gegangen.

    Einmal über 'pre_get_posts':
    Dieser Code sortiert die Alben nach Titel aufsteigend. Leider habe ich keine Ahnung, wie ich den Code nach der taxonomie 'jahr' sortieren kann.

    Code
    // in der functions.php mit 'pre_get_posts'
    
    
    add_action( 'pre_get_posts', 'album_sort1'); 
        function album_sort1($query1){
            if(is_post_type_archive( 'album' )):
               $query1->set( 'order', 'ASC' );
               $query1->set( 'orderby', 'title' );
            endif;
     };

    Vielleicht ist dies der falsche Ansatz aber über einen eigenen Loop habe ich es auch nicht geschafft.

    marvin

    ich poste mal wo ich bei meinem eigenen Loop hänge.

    Leider weiß ich nicht genau welche Werte ich bei terms und field aus der Datenbank eintragen muss.

  • Hättest Du meine Suche bei Google durchgeführt, wärst Du z.B. auf folgenden GIT gestoßen: https://gist.github.com/kopepasah/3132619

    Oder aber auch diesen sehr ausführlichen Beitrag: https://markwilkinson.me/2015/06/sort-p…-type-archives/

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Vielen Dank nochmal für die Links. Anhand dieser kann ich mein Problem besser beschreiben.

    Die Ausgabe sollte nicht so sein:

    Erscheinungsjahr 1980
    - Album 1
    - Album 2
    - Album N

    Erscheinungsjahr 1981
    - Album 20
    - Album 21
    - Album N

    sondern so:

    Album 1
    - Erscheinungsjahr 1980

    Album 2
    - Erscheinungsjahr 1981

    Album N
    - Erscheinungsjahr 1999

    Das Erscheinungsjahr ist in der Albumüberssichtsseite mit angeführt und die Posts sollen nach dem Erscheinungsjahr sortiert werden.

    Hoffentlich konnte ich jetzt mein Problem besser darstellen.

  • Hast Du den GIST für Deinen CPT und CT angepasst? Hast Du verstanden das es keine "einfache" Lösung gibt? Du brauchst 2 Abfragen. Zuerst wird ein Array aus den sortierten Terms (Jahreszahlen) der Taxonomy (Erscheinungsjahr) gebildet. Dann loopst Du durch das Array und fragst alle Posts ab, die dem aktuellen Term der Taxonomy zugeordnet sind.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Hallo Mensmaximus,
    danke für Deine Geduld. Das mit den zwei Abfragen habe ich verstanden. Nur sind diese meines Erachtens genau falsch herum.

    Folgendes Beispiel:

    Ich habe eine Band (CT von Album) mit 10 Alben (Album ist CPT).
    Jedes dieser Alben hat eine anderes Erscheinungsjahr (CT von Album).

    Die Ausgabe zeigt mir bei der archive-album.php eine Auflistung von 100 Alben nach Erstellungsdatum sortiert.
    Jetzt klicke ich auf die Band (CT von Album) und gelange somit auf die taxonomy-band.php mit der Auflistung aller 10 Alben dieser Band nach Erstellungsdatum sortiert.

    Mein Wunsch: Die Ausgabe der Alben in der taxonomy-band.php soll nach Erscheinungsjahr (CT von Album) sortiert ausgegeben werden.

    Ich will nicht alle Album nach Erscheinungsjahr sortieren, sondern ich will nur alle Alben eines bestimmten Interpreten/Band ausgegeben haben und diese nach Erscheinungsjahr.


    Viele Grüße

  • Dann machst Du eben auf der taxonomy-band.php wieder das selbe. Erscheinungsjahr Taxonomie Terms auslesen, foreach loop starten und nun die Alben ausgeben, die das Erscheinungsjahr haben.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Genau da liegt das Problem. Ich will nicht alle Alben ausgeben, die das Erscheinungsjahr haben, sondern ich will alle Alben einer bestimmten Band ausgeben, sortiert nach Erscheinungsjahr.

    Bezogen auf den unteren Code ist die Reihenfolge der Abfragen falsch.



    Der Weg müsste folgendermaßen aussehen:

    Ausgabe taxonomy-band.php
    1. Hole mir alle Alben der Band 'XYZ'
    2. Sortiere alle gefundenen Alben der Band 'XYZ' nach dem Erscheinungsjahr

    Der Code oben sagt:

    1. Sortiere alle Alben nach dem Erscheinungsjahr
    2. Gib alle Alben aus sortiert nach Erscheinungsjahr

    Meine Frage ist: Wie kann ich alle Alben einer bestimmten Band ausgeben, sortiert nach dem Erscheinungsjahr?

  • Idee: (Inspiration durch https://gist.github.com/mikeschinkel/18373486fb1900319f2a)

    Übergebe als orderby Argument den Namen der Taxonomie nach dessen Terms sortiert werden soll (erscheinungsjahr)

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Oder man fügt dem Resultset immer die Terms der Taxonomie hinzu

    Code
    add_filter( 'the_posts', 'mmx_add_tax_to_posts' );
    function mmx_add_tax_to_posts( $posts ) {
        for ( $i = 0; $i < count( $posts ); $i++ ) {
            $terms = wp_get_post_terms( $posts[$i]->ID, 'erscheinunsgjahr', array( "fields" => "slugs" ) );
            $posts[$i]->my_terms = $terms;
        }
        return $posts;
    }

    Im Anschluss kann man die Terms wie gehabt in ein array auslesen und mittels array_multisort auf $wp_query->posts anwenden

    Das dürfte bei vielen Besuchern aber langsamer sein.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Hallo,

    danke für deine Vorschläge. Entweder steh ich auf dem Schlauch oder ich Checks einfach nicht. Ich bin mittlerweile auch der Meinung über einen add_filter und/oder über pre_get_posts zu gehen als über einen eigenen Loop.

    Folgendes funktioniert super.

    Code
    function taxonomy_band_01( $query01 ) {
        if ( !is_admin() && $query01->is_tax( 'band' ) && $query01->is_main_query() ) {
            $query01->set( 'orderby', 'title' );
            $query01->set( 'order', 'ASC' );
        }
    }
    add_action( 'pre_get_posts', 'taxonomy_band_01' );

    mit diesem Code werden die Alben in der taxonomy-band.php nach title sortiert ausgegeben. In dieser Abfrage müsste man doch mit set oder get auf die CT 'publishing_year' kommen.

    Für Ideen bin ich sehr dankbar.

  • Entweder steh ich auf dem Schlauch oder ich Checks einfach nicht.

    Ja wenn Du noch nicht einmal Copy and Paste machen kannst, weiß ich nicht wie man Dir helfen soll. Ich bin raus.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Guten morgen,

    das mit dem Copy & Paste funktioniert, aber der Code leider nicht. Ich werde es mal im Englischen Formu versuchen.
    Vielen Dank für deine Ideen und deine Geduld.


    Viele Grüße
    Michael

  • Du hast aber schon daran gedacht den Code anzupassen? Im Code steht 'erscheinungsjahr' weil Du das bis dahin immer geschrieben hast. Jetzt schreibst Du von "publishing_year". Das muss man natürlich ändern. Was willst Du denn im englischen Forum, wenn Du es in deutsch nicht richtig erklären kannst?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

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