Ankerlink an den Anfang der Seite
organ whistle 411515 1920
Generic filters
Filter by Kategorien

Der Beitrag, geschriebem am 13. März 2015, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Eine Netzwerkpartnerin betreut seit langer Zeit ein WordPress-Projekt auf dem unter anderem eine Seite mit einer Liste der Mitarbeiter geführt wurde. Enthalten waren Positionen, Kontaktdaten und je ein (floatendes) Bild pro Person. Das alles auf einer Seite war für den Kunden nicht angenehm zu editieren. Da das Blog bisher nicht genutzt worden war, hatte sie die Idee, pro Mitarbeiter einen Beitrag anzulegen und der Kategorie «team» zuzuordnen. Der Name war der Beitragstitel, und die Sortierung sollte alphabetisch erfolgen. Die Herausfordung daran war, dass eine Sortierung per Nachname gewünscht war, der aber im Beitragstitel zuletzt kam.

Unsere Umsetzung bestand darin, aus dem Beitragstitel via explode (an Leerzeichen) ein Array zu generieren, von diesem mit end den letzten Wert zu extrahieren und automatisch in einem Custom Field zu speichern. Dieses wählten wir dann als Sortierkriterium aus.

Nachfolgende Funktion befüllt das Custom Field, sortmeta (sofern dieses leer ist, um ggf. auch eine manuelle Kontrolle über die Sortierung zuzulassen).

function pptf_add_field_tosort ( $post_id ) {
    $title = get_the_title( $post_id );
    $pieces = explode(' ',$title);
    $field = end($pieces);
    $post_meta = get_post_meta( $post_id, 'sortmeta', true );
    if ( empty( $post_meta ) ) update_post_meta( $post_id, 'sortmeta', $field  );
}
add_action( 'save_post', 'pptf_add_field_tosort', 100, 2);

Das Feld wird übrigens auch dann befüllt, wenn man in der Übersichtsliste der Beiträge die Stapelverarbeitung für Bearbeiten aktiviert, und einfach alle Posts (neu) speichert.

Hier wird abgefragt, ob wir uns in der Kategorie team befinden, und wenn ja, der Query modfiziert und die Sortierung über das benutzerdefinierte Feld angewendet.

function pptf_loop_the_cat($query) {
    if ( is_admin() || !$query->is_main_query() )
        return;

    if ( $query->is_category('team') ) {
        $queried_object = $query->get_queried_object();
        $term = $queried_object->term_id;
        $query->set( 'posts_per_page', -1 );
        $query->set( 'cat', $term );
        $query->set( 'meta_key', 'sortmeta' );
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'pptf_loop_the_cat' );

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

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

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.