Benutzerdefinierte Seitenvorlage mit Sortierfunktion erstellen


News oder Veranstaltungen nach Datum sortieren

Im Beispiel wird der Code für eine benutzerdefinierte Seitenvorlage mit Sortierfunktion vorgestellt, um News und Veranstaltungen nach Datum zu sortieren, insofern die Titel verwertbare Datumsangaben enthalten.


Übersicht, Varianten und Code-Listings:


Einzelheiten

Im Gegensatz zu normalen Seitenvorlagen wird der Content nicht innerhalb von The Loop ausgegeben, sondern zusammen mit den entsprechenden HTML-Elementen in einem assoziativen Array gespeichert. Beim Speichern werden dabei die Titel mit Hilfe einer Funktion nach in den Titeln vorhandenen Datumsangaben durchsucht und die Titel plus gefundener Datumsangaben als Schlüssel fürs Array verwendet.

Vor einer Ausgabe kann das Array nun nach Belieben sortiert werden, wobei für die Sortierung im Beispiel die PHP-Funktion ksort verwendet wird. Die eigentliche Ausgabe erfolgt im Anschluss außerhalb von The Loop innerhalb einer Foreach-Schleife. Erfolgt die Sortierung des Arrays mit ksort, so werden die Schlüssel-Werte-Paare nach ihren Schlüsseln in umgekehrter Reihenfolge sortiert.
Die aktuellsten Ereignisse stehen durch diese Sortierung oben, gefolgt von den Ereignissen, die nicht mehr ganz so taufrisch sind und am Ende werden die Beiträge ausgegeben, deren Titel kein Datum enthielten.

Ein Nachteil, es wird nur die Ausgabe sortiert, nicht die Abfrage aus der Datenbank. Enthält ein weiter zurückliegender Beitrag einen aktuelleren Termin, würde dieser nicht mit aus der Datenbank abgerufen.

Reihenfolge der Posts und Titel bei Abruf aus der Datenbank:

Am 24.01.2014 um 23.30 Uhr in Stendal
Eine Veranstaltung ohne Datum in Berlin
Faschingsparty » 09.03.2014 ab 20:30 Uhr
Stendal im Februar – 24.02.2014 um 22.30 Uhr

Reihenfolge der Posts und Titel bei Ausgabe:

Faschingsparty » 09.03.2014 ab 20:30 Uhr
Stendal im Februar – 24.02.2014 um 22.30 Uhr
Am 24.01.2014 um 23.30 Uhr in Stendal
Eine Veranstaltung ohne Datum in Berlin

Template-Vorlage Aktuelle News mit Sortierfunktion:

<?php
/*
 * Template Name: Aktuelle News
 */

get_header();
?>

    <div id="primary" class="site-content">
        <div id="content" role="main">
<?php

/*-- Das Datum auslesen und die Reihenfolge in Jahr, Monat, Tag aendern ----------*/

function neuer_titel($data) {

    $data = preg_replace("/(.*?)(\d{2})\.(\d{2})\.(\d{4})(.*)/", "$4$3$2", $data);
    return $data;
}
/*-- Einrueckungen fuer Content formatieren --------------------------------------*/

function formatiere_den_inhalt($content){

    $content = preg_replace("/\n/", "\n\t\t", $content);
    return $content;
}
/*-- Eine neue Instanz des WP_Query Objektes erzeugen ----------------------------*/

$args = array("posts_per_page" => 10,          // anzuzeigende Ergebnisse pro Seite
              "cat"            => 38,          // ID der Kategorie angeben
              "post_type"      => "post"
              ); 

$news_arr = new WP_Query($args);

/*----------------------------------------------------------------------------------
 The Loop nicht als Ausgabeschleife verwenden, sondern zum Einlesen der Titel und
 des Contents in ein assoziatives Array, bei dem Jahr, Monat, Tag als Schluessel
 verwendet werden.
 -----------------------------------------------------------------------------------
*/
while ($news_arr->have_posts()) : $news_arr->the_post();

    $more = 0;

    $schluessel = neuer_titel($post->post_title);   
    $sammelpost = "\t<article>\n".
                  "\t\t<header class=\"entry-header\">\n".
                  "\t\t<h1 class=\"entry-title\"><a href=\"".
                  esc_html(get_permalink())."\">".
                  esc_html(get_the_title())."</a></h1>\n".
                  "\t\t</header>\n".
                  "\t\t<div class=\"entry-content\">".
                  formatiere_den_inhalt(get_the_content(__("weiterlesen ".
                  "<span class=\"meta-nav\">&rarr;</span>")))."\n".
                  "\t\t</div>\n".
                  "\t</article>\n";

    $sortiere[$schluessel] =  $sammelpost;
endwhile; 

/*-- Arry in umgekeehrter Reihenfolge sortieren und ausgeben ---------------------*/

krsort($sortiere);

foreach ($sortiere as $inhalt) {
    echo $inhalt."\n";
}
?>
        </div>
    </div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *