Coding | PHP

WordPress: Wenn das Sortierkriterium an letzter Stelle im Beitragstitel steht

organ whistle 411515 1920

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.

Die Lösung bestand darin, aus dem Beitragstitel via explode (an Leerzeichen) ein Array zu generieren, von diesem mit <a href="http://php.net/manual/de/function.end.php" title="php referenz array_pop" target="_blank">end</a> 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' );

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.